diff --git a/Dosificador_LCD2004_4buttons/Dosificador_LCD2004_4buttons.ino b/Dosificador_LCD2004_4buttons/Dosificador_LCD2004_4buttons.ino index 719a1d5..3db3ef3 100644 --- a/Dosificador_LCD2004_4buttons/Dosificador_LCD2004_4buttons.ino +++ b/Dosificador_LCD2004_4buttons/Dosificador_LCD2004_4buttons.ino @@ -11,92 +11,102 @@ /************************************************** * Definición de Constantes **************************************************/ - // LCD2004 I2C - #define LCD_I2C_ADDRESS 0x27 + // LCD2004 I2C + #define LCD_I2C_ADDRESS 0x27 - // PINOUT - #define RELAY_PIN 4 - #define DOSING_BUTTON_PIN 3 - #define SETTINGS_BUTTONS_PIN A2 + // PINOUT + #define RELAY_PIN A2 + #define DOSING_BUTTON_PIN A1 + #define SETTINGS_BUTTONS_PIN A0 - // BUTTON SETTINGS - #define SETTING_BUTTON_IN_VAL 15 - #define SETTING_BUTTON_OUT_VAL 92 - #define SETTING_BUTTON_UP_VAL 42 - #define SETTING_BUTTON_DOWN_VAL 67 +/************************************************** +* BOTONES +**************************************************/ + #define SETTING_BUTTON_IN_VAL 14 + #define SETTING_BUTTON_UP_VAL 41 + #define SETTING_BUTTON_DOWN_VAL 66 + #define SETTING_BUTTON_OUT_VAL 89 - #define SETTING_BUTTON_TOLERANCE_READ 2 - #define SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS 80 - #define SETTING_BUTTON_DELAY_MILLIS 450 + #define SETTING_BUTTON_TOLERANCE_READ 5 + #define SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS 5 + #define SETTING_BUTTON_DELAY_MILLIS 350 - // BLOQUES DE MEMORIA EEPROM - #define BUTTON_SENSITIVITY_EEPROM_ADDRESS 0 - #define PRESS_BUTTON_EEPROM_ADDRESS 1 - #define HOLD_DOWN_BUTTON_EEPROM_ADDRESS 2 - #define LAG_TIME_MIN_EEPROM_ADDRESS 3 // Minutos, tiempo de retraso - #define LAG_TIME_SEG_EEPROM_ADDRESS 4 // Segundo, tiempo de retraso - #define LAG_TIME_DEC_EEPROM_ADDRESS 5 // Décimas de segundo, tiempo de retraso - #define DOSING_TIME_MIN_EEPROM_ADDRESS 6 // Minutos, tiempo dosificación - #define DOSING_TIME_SEG_EEPROM_ADDRESS 7 // Segundos, tiempo dosificación - #define DOSING_TIME_DEC_EEPROM_ADDRESS 8 // Décimas de segundo, tiempo dosificación + // 4-button configuration + uint16_t button_values[] = {SETTING_BUTTON_IN_VAL, SETTING_BUTTON_OUT_VAL, SETTING_BUTTON_UP_VAL, SETTING_BUTTON_DOWN_VAL}; + uint32_t _bt[sizeof(button_values)]; // millis + uint32_t confirmation_repeats_millis; + +/************************************************** +* MENÚ +**************************************************/ + // BLOQUES DE MEMORIA EEPROM + #define BUTTON_SENSITIVITY_EEPROM_ADDRESS 0 + #define PRESS_BUTTON_EEPROM_ADDRESS 1 + #define HOLD_DOWN_BUTTON_EEPROM_ADDRESS 2 + #define LAG_TIME_MIN_EEPROM_ADDRESS 3 // Minutos, tiempo de retraso + #define LAG_TIME_SEG_EEPROM_ADDRESS 4 // Segundo, tiempo de retraso + #define LAG_TIME_DEC_EEPROM_ADDRESS 5 // Décimas de segundo, tiempo de retraso + #define DOSING_TIME_MIN_EEPROM_ADDRESS 6 // Minutos, tiempo dosificación + #define DOSING_TIME_SEG_EEPROM_ADDRESS 7 // Segundos, tiempo dosificación + #define DOSING_TIME_DEC_EEPROM_ADDRESS 8 // Décimas de segundo, tiempo dosificación - // FACTORY SETTINGS - #define BUTTON_SENSITIVITY_DEFAULT_VALUE 9 - #define PRESS_BUTTON_DEFAULT_VALUE 3 - #define HOLD_DOWN_BUTTON_DEFAULT_VALUE 1 - #define LAG_TIME_MIN_DEFAULT_VALUE 0 // Minutos, tiempo de retraso - #define LAG_TIME_SEG_DEFAULT_VALUE 3 // Segundo, tiempo de retraso - #define LAG_TIME_DEC_DEFAULT_VALUE 5 // Décimas de segundo, tiempo de retraso - #define DOSING_TIME_MIN_DEFAULT_VALUE 1 // Minutos, tiempo dosificación - #define DOSING_TIME_SEG_DEFAULT_VALUE 10 // Segundos, tiempo dosificación - #define DOSING_TIME_DEC_DEFAULT_VALUE 9 // Décimas de segundo, tiempo dosificación + // FACTORY SETTINGS + #define BUTTON_SENSITIVITY_DEFAULT_VALUE 9 + #define PRESS_BUTTON_DEFAULT_VALUE 3 + #define HOLD_DOWN_BUTTON_DEFAULT_VALUE 1 + #define LAG_TIME_MIN_DEFAULT_VALUE 0 // Minutos, tiempo de retraso + #define LAG_TIME_SEG_DEFAULT_VALUE 3 // Segundo, tiempo de retraso + #define LAG_TIME_DEC_DEFAULT_VALUE 5 // Décimas de segundo, tiempo de retraso + #define DOSING_TIME_MIN_DEFAULT_VALUE 1 // Minutos, tiempo dosificación + #define DOSING_TIME_SEG_DEFAULT_VALUE 10 // Segundos, tiempo dosificación + #define DOSING_TIME_DEC_DEFAULT_VALUE 9 // Décimas de segundo, tiempo dosificación - // SETTINGS MENU - #define ALL_SETTINGS 0 - #define OUT_OF_MENU 0 + // SETTINGS MENU + #define ALL_SETTINGS 0 + #define OUT_OF_MENU 0 - #define IN_SENSITIVITY_BUTTON 1 - #define IN_PRESS_BUTTON 2 - #define IN_HOLD_DOWN_BUTTON 3 - #define IN_LAG 4 - #define IN_DOSING 5 - #define IN_FACTORY_RESET 6 - #define IN_RESTART 7 - #define IN_EXIT 8 + #define IN_SENSITIVITY_BUTTON 1 + #define IN_PRESS_BUTTON 2 + #define IN_HOLD_DOWN_BUTTON 3 + #define IN_LAG 4 + #define IN_DOSING 5 + #define IN_FACTORY_RESET 6 + #define IN_RESTART 7 + #define IN_EXIT 8 - #define VIEW 0 - #define UPDATE 1 + #define VIEW 0 + #define UPDATE 1 - #define POSITION_ONE 0 - #define POSITION_TWO 1 - #define POSITION_THREE 2 + #define POSITION_ONE 0 + #define POSITION_TWO 1 + #define POSITION_THREE 2 - #define MODE_1 0 - #define MODE_2 1 - #define MODE_3 2 - #define FACTORY_RESET 3 - #define RESTART 4 - #define CANCEL 5 + #define MODE_1 0 + #define MODE_2 1 + #define MODE_3 2 + #define FACTORY_RESET 3 + #define RESTART 4 + #define CANCEL 5 - #define AUTO_EXIT_MENU_MILLIS 15000 - #define BLINK_MILLIS 1600 - #define LCD_PROCESS_REFRESH_MILLIS 333 + #define AUTO_EXIT_MENU_MILLIS 15000 + #define BLINK_MILLIS 1600 + #define LCD_PROCESS_REFRESH_MILLIS 333 - // DISPENSER - #define DISPENSER_RESTART 10 - #define DISPENSER_IDLE 0 - #define DISPENSER_DETECTING 1 - #define DISPENSER_LAG 2 - #define DISPENSER_DOSING 3 - #define DISPENSER_BLOCK 4 + // DISPENSER + #define DISPENSER_RESTART 10 + #define DISPENSER_IDLE 0 + #define DISPENSER_DETECTING 1 + #define DISPENSER_LAG 2 + #define DISPENSER_DOSING 3 + #define DISPENSER_BLOCK 4 - // STATUS RELAY - #define RELAY_HIGH HIGH - #define RELAY_LOW LOW + // STATUS RELAY + #define RELAY_HIGH HIGH + #define RELAY_LOW LOW - // STATUS BUTTON - #define DOSING_BUTTON_PUSH 0 - #define DOSING_BUTTON_IDLE 1 + // STATUS BUTTON + #define DOSING_BUTTON_PUSH 0 + #define DOSING_BUTTON_IDLE 1 /************************************************** @@ -104,944 +114,963 @@ * Define DEBUG_SERIAL_ENABLE to enable debug serial. * Comment it to disable debug serial. **************************************************/ - //#define DEBUG_SERIAL_ENABLE + //#define DEBUG_SERIAL_ENABLE - #define dbSerial Serial + #define dbSerial Serial - #ifdef DEBUG_SERIAL_ENABLE - #define serialPrint(a) dbSerial.print(a) - #define serialPrintln(a) dbSerial.println(a) - #define serialBegin(a) dbSerial.begin(a) - #define serialBeginWhile(a) while(!dbSerial) delay(1) - #else - #define serialPrint(a) do{}while(0) - #define serialPrintln(a) do{}while(0) - #define serialBegin(a) do{}while(0) - #define serialBeginWhile(a) do{}while(0) - #endif + #ifdef DEBUG_SERIAL_ENABLE + #define serialPrint(a) dbSerial.print(a) + #define serialPrintln(a) dbSerial.println(a) + #define serialBegin(a) dbSerial.begin(a) + #define serialBeginWhile(a) while(!dbSerial) delay(1) + #else + #define serialPrint(a) do{}while(0) + #define serialPrintln(a) do{}while(0) + #define serialBegin(a) do{}while(0) + #define serialBeginWhile(a) do{}while(0) + #endif /************************************************** * ENVIRONMENT VARIABLES **************************************************/ - // Dosing - uint16_t button_sensitivity_millis; - uint8_t press_button_mode; - uint8_t hold_down_button_mode; - uint16_t lag_time_decseg; - uint16_t dosing_time_decseg; + // Dosing + uint16_t button_sensitivity_millis; + uint8_t press_button_mode; + uint8_t hold_down_button_mode; + uint16_t lag_time_decseg; + uint16_t dosing_time_decseg; uint32_t button_pressed_millis; uint8_t release_button; - uint8_t dispenser_status; - uint32_t dispenser_status_time_millis; + uint8_t dispenser_status; + uint32_t dispenser_status_time_millis; - // 4-button configuration - uint8_t button_values[] = {SETTING_BUTTON_IN_VAL, SETTING_BUTTON_OUT_VAL, SETTING_BUTTON_UP_VAL, SETTING_BUTTON_DOWN_VAL}; - uint32_t _bt[sizeof(button_values)]; // millis - uint32_t confirmation_repeats_millis; + uint8_t menu_section; + uint8_t menu_status; + uint8_t menu_cursor_var; - uint8_t menu_section; - uint8_t menu_status; - uint8_t menu_cursor_var; + uint8_t setup_var[3]; - uint8_t setup_var[3]; - - uint32_t last_change_menu_millis; + uint32_t last_change_menu_millis; - // LCD2004 Render - LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); + // LCD2004 Render + LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); - String menu[] = { - "SENSIBILIDAD BOTON", - "AL PRESIONAR BOTON", - "AL MANTENER PRESIO", - "RETARDO AL INICIAR", - "TIEMPO DOSIFICACION", - "VALORES DE FABRICA", - "REINICIAR", - "SALIR", - }; + String menu[] = { + "SENSIBILIDAD BOTON", + "AL PRESIONAR BOTON", + "AL MANTENER PRESIO", + "RETARDO AL INICIAR", + "TIEMPO DOSIFICACION", + "VALORES DE FABRICA", + "REINICIAR", + "SALIR", + }; - String status[] = { - "EN ESPERA", - "DETECTANDO", - "DOSIFICARA", - "DOSIFICANDO", - "BLOQUEADO", - }; + String status[] = { + "EN ESPERA", + "DETECTANDO", + "DOSIFICARA", + "DOSIFICANDO", + "BLOQUEADO", + }; - String text_info[] = { - "MODO 1", - "MODO 2", - "MODO 3", - "RESTAURAR", - "REINICAR", - "CANCELAR", - }; + String text_info[] = { + "MODO 1", + "MODO 2", + "MODO 3", + "RESTAURAR", + "REINICAR", + "CANCELAR", + }; - boolean refresh_lcd_menu; - uint32_t blink_millis; + boolean refresh_lcd_menu; + uint32_t blink_millis; /************************************************** * FRONT PANEL OF CONFIGURATIONS **************************************************/ - // button methods and memory spaces - void loop_settings_panel_buttons() - { - // Leemos valor analogo del botón - uint8_t button_value = analogRead(SETTINGS_BUTTONS_PIN); - - // Comprobamos el valor obtenido con un rago de tolerancia SETTING_BUTTON_TOLERANCE_READ - for (uint8_t i = 0; i < sizeof button_values / sizeof button_values[0]; i++) { - if(button_values[i] >= (button_value - SETTING_BUTTON_TOLERANCE_READ) && button_values[i] <= (button_value + SETTING_BUTTON_TOLERANCE_READ)) - button_value = button_values[i]; - } - - //Valoramos si se presiono un botón y ejecutamos el metodo correspondiente - switch(button_value) { - case SETTING_BUTTON_IN_VAL: - if(millis() >= _bt[0] + SETTING_BUTTON_DELAY_MILLIS) { - if(confirmation_repeats_millis == 0) - confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; - - if(millis() > confirmation_repeats_millis){ - action_button(SETTING_BUTTON_IN_VAL); - - _bt[0] = millis(); - } - } - break; - - case SETTING_BUTTON_OUT_VAL: - if(millis() >= _bt[1] + SETTING_BUTTON_DELAY_MILLIS) { - if(confirmation_repeats_millis == 0) - confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; - - if(millis() > confirmation_repeats_millis){ - action_button(SETTING_BUTTON_OUT_VAL); - - _bt[1] = millis(); - } - } - break; - - case SETTING_BUTTON_UP_VAL: - if(millis() >= _bt[2] + SETTING_BUTTON_DELAY_MILLIS) { - if(confirmation_repeats_millis == 0) - confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; - - if(millis() > confirmation_repeats_millis){ - action_button(SETTING_BUTTON_UP_VAL); - - _bt[2] = millis(); - } - } - break; - - case SETTING_BUTTON_DOWN_VAL: - if(millis() >= _bt[3] + SETTING_BUTTON_DELAY_MILLIS) { - if(confirmation_repeats_millis == 0) - confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; - - if(millis() > confirmation_repeats_millis){ - action_button(SETTING_BUTTON_DOWN_VAL); - - _bt[3] = millis(); - } - } - break; - - default: - confirmation_repeats_millis = 0; - } - - // Verificamos y salimos del menú si a pasan AUTO_EXIT_MENU_MILLIS - if((menu_section != OUT_OF_MENU) && (millis() >= last_change_menu_millis + AUTO_EXIT_MENU_MILLIS)){ - load_menu_variables(OUT_OF_MENU); - - refresh_lcd_menu = true; - - serialPrintln("AUTO_EXIT_MENU_MILLIS"); - } - } - - void action_button(uint8_t button_value) - { - switch(button_value) { - case SETTING_BUTTON_IN_VAL: - switch(menu_section) { - case OUT_OF_MENU: - load_menu_variables(IN_SENSITIVITY_BUTTON); - break; - - case IN_SENSITIVITY_BUTTON: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_ONE) - save_setting(IN_SENSITIVITY_BUTTON); - break; - - case IN_PRESS_BUTTON: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_ONE) - save_setting(IN_PRESS_BUTTON); - break; - - case IN_HOLD_DOWN_BUTTON: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_ONE) - save_setting(IN_HOLD_DOWN_BUTTON); - break; - - case IN_LAG: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_THREE) - save_setting(IN_LAG); - break; - - case IN_DOSING: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_THREE) - save_setting(IN_DOSING); - break; - - case IN_FACTORY_RESET: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_ONE) - save_setting(IN_FACTORY_RESET); - break; - - case IN_RESTART: - if(menu_status == VIEW) - menu_status = UPDATE; - - else if(++menu_cursor_var > POSITION_ONE) - save_setting(IN_RESTART); - break; - - case IN_EXIT: - load_menu_variables(OUT_OF_MENU); - break; - } - break; - - case SETTING_BUTTON_OUT_VAL: - switch(menu_status){ - case VIEW: - load_menu_variables(OUT_OF_MENU); - break; - - case UPDATE: - if(menu_cursor_var == 0) - load_menu_variables(menu_section); - else - menu_cursor_var--; - } - break; - - case SETTING_BUTTON_UP_VAL: - switch(menu_section) { - case OUT_OF_MENU: - load_menu_variables(IN_RESTART); - break; - - case IN_SENSITIVITY_BUTTON: - if(menu_status == VIEW){ - load_menu_variables(IN_EXIT); - - }else{ // UPDATE - setup_var[0] = setup_var[0] >= 10 ? 1 : ++setup_var[0]; - } - break; - - case IN_PRESS_BUTTON: - if(menu_status == VIEW){ - load_menu_variables(IN_SENSITIVITY_BUTTON); - - }else{ // UPDATE - setup_var[0] = setup_var[0] <= 1 ? 3 : --setup_var[0]; - } - break; - - case IN_HOLD_DOWN_BUTTON: - if(menu_status == VIEW){ - load_menu_variables(IN_PRESS_BUTTON); - - }else{ // UPDATE - setup_var[0] = setup_var[0] <= 1 ? 2 : --setup_var[0]; - } - break; - - case IN_LAG: - if(menu_status == VIEW){ - load_menu_variables(IN_PRESS_BUTTON); - - }else{ // UPDATE - if(menu_cursor_var == POSITION_ONE) - setup_var[0] = setup_var[0] >= 60 ? 0 : ++setup_var[0]; // Minutos - - else if(menu_cursor_var == POSITION_TWO) - setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Segundo - - else if(menu_cursor_var == POSITION_THREE) - setup_var[2] = setup_var[2] >= 9 ? 0 : ++setup_var[2]; // Decimas de segundo - } - break; - - case IN_DOSING: - if(menu_status == VIEW){ - load_menu_variables(IN_LAG); - - }else{ // UPDATE - if(menu_cursor_var == POSITION_ONE) - setup_var[0] = setup_var[0] >= 60 ? 0 : ++setup_var[0]; // Minutos - - else if(menu_cursor_var == POSITION_TWO) - setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Segundo - - else if(menu_cursor_var == POSITION_THREE) - setup_var[2] = setup_var[2] >= 9 ? 0 : ++setup_var[2]; // Decimas de segundo - } - break; - - case IN_FACTORY_RESET: - if(menu_status == VIEW){ - load_menu_variables(IN_DOSING); - - }else{ // UPDATE - setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; - } - break; - - case IN_RESTART: - if(menu_status == VIEW){ - load_menu_variables(IN_FACTORY_RESET); - - }else{ // UPDATE - setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; - } - break; - - case IN_EXIT: - load_menu_variables(IN_FACTORY_RESET); - break; - } - break; - - case SETTING_BUTTON_DOWN_VAL: - switch(menu_section) { - case OUT_OF_MENU: - load_menu_variables(IN_SENSITIVITY_BUTTON); - break; - - case IN_SENSITIVITY_BUTTON: - if(menu_status == VIEW){ - load_menu_variables(IN_PRESS_BUTTON); - - }else{ // UPDATE - setup_var[0] = setup_var[0] <= 1 ? 10 : --setup_var[0]; - } - break; - - case IN_PRESS_BUTTON: - if(menu_status == VIEW){ - load_menu_variables(IN_LAG); - - }else{ // UPDATE - setup_var[0] = setup_var[0] >= 3 ? 1 : ++setup_var[0]; - } - break; - - case IN_HOLD_DOWN_BUTTON: - if(menu_status == VIEW){ - load_menu_variables(IN_LAG); - - }else{ // UPDATE - setup_var[0] = setup_var[0] >= 2 ? 1 : ++setup_var[0]; - } - break; - - case IN_LAG: - if(menu_status == VIEW){ - load_menu_variables(IN_DOSING); - - }else{ // UPDATE - if(menu_cursor_var == POSITION_ONE) - setup_var[0] = setup_var[0] <= 0 ? 60 : --setup_var[0]; // Minutos - - else if(menu_cursor_var == POSITION_TWO) - setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Segundo - - else if(menu_cursor_var == POSITION_THREE) - setup_var[2] = setup_var[2] <= 0 ? 9 : --setup_var[2]; // Decimas de segundo - } - break; - - case IN_DOSING: - if(menu_status == VIEW){ - load_menu_variables(IN_FACTORY_RESET); - - }else{ // UPDATE - if(menu_cursor_var == POSITION_ONE) - setup_var[0] = setup_var[0] <= 0 ? 60 : --setup_var[0]; // Minutos - - else if(menu_cursor_var == POSITION_TWO) - setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Segundo - - else if(menu_cursor_var == POSITION_THREE) - setup_var[2] = setup_var[2] <= 0 ? 9 : --setup_var[2]; // Decimas de segundo - } - break; - - case IN_FACTORY_RESET: - if(menu_status == VIEW){ - load_menu_variables(IN_RESTART); - - }else{ // UPDATE - setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; - } - break; - - case IN_RESTART: - if(menu_status == VIEW){ - load_menu_variables(IN_EXIT); - - }else{ // UPDATE - setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; - } - break; - - case IN_EXIT: - load_menu_variables(IN_SENSITIVITY_BUTTON); - break; - } - break; - } - - refresh_lcd_menu = true; - last_change_menu_millis = millis(); - - serialPrint("button_value: "); - serialPrintln(button_value); - - serialPrint("menu_section: "); - serialPrint(menu_section); - serialPrint(", menu_status: "); - serialPrint(menu_status); - serialPrint(", menu_cursor_var: "); - serialPrint(menu_cursor_var); - serialPrint(", setup_var[0]: "); - serialPrint(setup_var[0]); - serialPrint(", setup_var[1]: "); - serialPrint(setup_var[1]); - serialPrint(", setup_var[2]: "); - serialPrintln(setup_var[2]); - } - - void save_setting(uint8_t _setting) - { - menu_status = VIEW; - menu_cursor_var = POSITION_ONE; - - switch(_setting){ - case IN_SENSITIVITY_BUTTON: - EEPROM.write(BUTTON_SENSITIVITY_EEPROM_ADDRESS, setup_var[0]); - - load_setting(IN_SENSITIVITY_BUTTON); - - serialPrintln("Save button_sensitivity_millis"); - break; - - case IN_PRESS_BUTTON: - EEPROM.write(PRESS_BUTTON_EEPROM_ADDRESS, setup_var[0]); - - load_setting(IN_PRESS_BUTTON); - - serialPrintln("Save press_button_mode"); - break; - - case IN_HOLD_DOWN_BUTTON: - EEPROM.write(HOLD_DOWN_BUTTON_EEPROM_ADDRESS, setup_var[0]); - - load_setting(IN_HOLD_DOWN_BUTTON); - - serialPrintln("Save hold_down_button_mode"); - break; - - case IN_LAG: - EEPROM.write(LAG_TIME_MIN_EEPROM_ADDRESS, setup_var[0]); - EEPROM.write(LAG_TIME_SEG_EEPROM_ADDRESS, setup_var[1]); - EEPROM.write(LAG_TIME_DEC_EEPROM_ADDRESS, setup_var[2]); - - load_setting(IN_LAG); - - serialPrintln("Save lag_time"); - break; - - case IN_DOSING: - EEPROM.write(DOSING_TIME_MIN_EEPROM_ADDRESS, setup_var[0]); - EEPROM.write(DOSING_TIME_SEG_EEPROM_ADDRESS, setup_var[1]); - EEPROM.write(DOSING_TIME_DEC_EEPROM_ADDRESS, setup_var[2]); - - load_setting(IN_DOSING); - - serialPrintln("Save dosing_time"); - break; - - case IN_FACTORY_RESET: - if(setup_var[0]){ - EEPROM.write(BUTTON_SENSITIVITY_EEPROM_ADDRESS, BUTTON_SENSITIVITY_DEFAULT_VALUE); - EEPROM.write(PRESS_BUTTON_EEPROM_ADDRESS, PRESS_BUTTON_DEFAULT_VALUE); - EEPROM.write(HOLD_DOWN_BUTTON_EEPROM_ADDRESS, HOLD_DOWN_BUTTON_DEFAULT_VALUE); - EEPROM.write(LAG_TIME_MIN_EEPROM_ADDRESS, LAG_TIME_MIN_DEFAULT_VALUE); - EEPROM.write(LAG_TIME_SEG_EEPROM_ADDRESS, LAG_TIME_SEG_DEFAULT_VALUE); - EEPROM.write(LAG_TIME_DEC_EEPROM_ADDRESS, LAG_TIME_DEC_DEFAULT_VALUE); - EEPROM.write(DOSING_TIME_MIN_EEPROM_ADDRESS, DOSING_TIME_MIN_DEFAULT_VALUE); - EEPROM.write(DOSING_TIME_SEG_EEPROM_ADDRESS, DOSING_TIME_SEG_DEFAULT_VALUE); - EEPROM.write(DOSING_TIME_DEC_EEPROM_ADDRESS, DOSING_TIME_DEC_DEFAULT_VALUE); - - load_setting(ALL_SETTINGS); - load_menu_variables(OUT_OF_MENU); - - serialPrintln("Restore factory settings"); - } - break; - - case IN_RESTART: - if(setup_var[0]){ - dispenser_status = DISPENSER_DOSING; - dispenser_status_time_millis = 0; - - load_menu_variables(OUT_OF_MENU); - - serialPrintln("Restart"); - } - break; - } - } - - void load_setting(uint8_t _setting) - { - switch(_setting){ - case ALL_SETTINGS: - load_setting(IN_SENSITIVITY_BUTTON); - load_setting(IN_PRESS_BUTTON); - load_setting(IN_HOLD_DOWN_BUTTON); - load_setting(IN_LAG); - load_setting(IN_DOSING); - break; - - case IN_SENSITIVITY_BUTTON: - button_sensitivity_millis = 1100 - (EEPROM.read(BUTTON_SENSITIVITY_EEPROM_ADDRESS) * 110); - - serialPrint("button_sensitivity_millis: "); - serialPrintln(button_sensitivity_millis); - break; - - case IN_PRESS_BUTTON: - press_button_mode = EEPROM.read(PRESS_BUTTON_EEPROM_ADDRESS); - - serialPrint("press_button_mode: "); - serialPrintln(press_button_mode); - break; - - case IN_HOLD_DOWN_BUTTON: - hold_down_button_mode = EEPROM.read(HOLD_DOWN_BUTTON_EEPROM_ADDRESS); - - serialPrint("hold_down_button_mode: "); - serialPrintln(hold_down_button_mode); - break; - - case IN_LAG: - lag_time_decseg = (EEPROM.read(LAG_TIME_SEG_EEPROM_ADDRESS) * 10) + EEPROM.read(LAG_TIME_DEC_EEPROM_ADDRESS); - - serialPrint("lag_time_decseg: "); - serialPrintln(lag_time_decseg); - break; - - case IN_DOSING: - dosing_time_decseg = (EEPROM.read(DOSING_TIME_MIN_EEPROM_ADDRESS) * 600) + (EEPROM.read(DOSING_TIME_SEG_EEPROM_ADDRESS) * 10) + EEPROM.read(DOSING_TIME_DEC_EEPROM_ADDRESS); - - serialPrint("dosing_time_decseg: "); - serialPrintln(dosing_time_decseg); - break; - } - } - - void load_menu_variables(uint8_t _menu_section) - { - menu_section = _menu_section; - menu_status = VIEW; - menu_cursor_var = POSITION_ONE; - - switch(_menu_section){ - case OUT_OF_MENU: - case IN_FACTORY_RESET: - case IN_RESTART: - setup_var[0] = 0; - setup_var[1] = 0; - setup_var[2] = 0; - break; - - case IN_SENSITIVITY_BUTTON: - setup_var[0] = EEPROM.read(BUTTON_SENSITIVITY_EEPROM_ADDRESS); - break; - - case IN_PRESS_BUTTON: - setup_var[0] = EEPROM.read(PRESS_BUTTON_EEPROM_ADDRESS); - break; - - case IN_HOLD_DOWN_BUTTON: - setup_var[0] = EEPROM.read(HOLD_DOWN_BUTTON_EEPROM_ADDRESS); - break; - - case IN_LAG: - setup_var[0] = EEPROM.read(LAG_TIME_MIN_EEPROM_ADDRESS); // Minutos - setup_var[1] = EEPROM.read(LAG_TIME_SEG_EEPROM_ADDRESS); // Segundos - setup_var[2] = EEPROM.read(LAG_TIME_DEC_EEPROM_ADDRESS); // Decimas de segundo - break; - - case IN_DOSING: - setup_var[0] = EEPROM.read(DOSING_TIME_MIN_EEPROM_ADDRESS); // Minutos - setup_var[1] = EEPROM.read(DOSING_TIME_SEG_EEPROM_ADDRESS); // Segundos - setup_var[2] = EEPROM.read(DOSING_TIME_DEC_EEPROM_ADDRESS); // Decimas de segundo - break; - } - } + // button methods and memory spaces + void loop_settings_panel_buttons() + { + // Leemos valor analogo del botón + uint16_t button_value = analogRead(SETTINGS_BUTTONS_PIN); + + // Comprobamos el valor obtenido con un rago de tolerancia SETTING_BUTTON_TOLERANCE_READ + for (uint16_t i = 0; i < sizeof button_values / sizeof button_values[0]; i++) { + if(button_values[i] >= (button_value - SETTING_BUTTON_TOLERANCE_READ) && button_values[i] <= (button_value + SETTING_BUTTON_TOLERANCE_READ)) + button_value = button_values[i]; + } + + //Valoramos si se presiono un botón y ejecutamos el metodo correspondiente + switch(button_value) { + case SETTING_BUTTON_IN_VAL: + if(millis() >= _bt[0] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_IN_VAL); + + _bt[0] = millis(); + } + } + break; + + case SETTING_BUTTON_OUT_VAL: + if(millis() >= _bt[1] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_OUT_VAL); + + _bt[1] = millis(); + } + } + break; + + case SETTING_BUTTON_UP_VAL: + if(millis() >= _bt[2] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_UP_VAL); + + _bt[2] = millis(); + } + } + break; + + case SETTING_BUTTON_DOWN_VAL: + if(millis() >= _bt[3] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_DOWN_VAL); + + _bt[3] = millis(); + } + } + break; + + default: + confirmation_repeats_millis = 0; + } + + // Verificamos y salimos del menú si a pasan AUTO_EXIT_MENU_MILLIS + if((menu_section != OUT_OF_MENU) && (millis() >= last_change_menu_millis + AUTO_EXIT_MENU_MILLIS)){ + load_menu_variables(OUT_OF_MENU); + + refresh_lcd_menu = true; + + serialPrintln("AUTO_EXIT_MENU_MILLIS"); + } + } + + void action_button(uint16_t button_value) + { + switch(button_value) { + case SETTING_BUTTON_IN_VAL: + switch(menu_section) { + case OUT_OF_MENU: + load_menu_variables(IN_SENSITIVITY_BUTTON); + break; + + case IN_SENSITIVITY_BUTTON: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_ONE) + save_setting(IN_SENSITIVITY_BUTTON); + break; + + case IN_PRESS_BUTTON: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_ONE) + save_setting(IN_PRESS_BUTTON); + break; + + case IN_HOLD_DOWN_BUTTON: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_ONE) + save_setting(IN_HOLD_DOWN_BUTTON); + break; + + case IN_LAG: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_THREE) + save_setting(IN_LAG); + break; + + case IN_DOSING: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_THREE) + save_setting(IN_DOSING); + break; + + case IN_FACTORY_RESET: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_ONE) + save_setting(IN_FACTORY_RESET); + break; + + case IN_RESTART: + if(menu_status == VIEW) + menu_status = UPDATE; + + else if(++menu_cursor_var > POSITION_ONE) + save_setting(IN_RESTART); + break; + + case IN_EXIT: + load_menu_variables(OUT_OF_MENU); + break; + } + break; + + case SETTING_BUTTON_OUT_VAL: + switch(menu_status){ + case VIEW: + load_menu_variables(OUT_OF_MENU); + break; + + case UPDATE: + if(menu_cursor_var == 0) + load_menu_variables(menu_section); + else + menu_cursor_var--; + } + break; + + case SETTING_BUTTON_UP_VAL: + switch(menu_section) { + case OUT_OF_MENU: + load_menu_variables(IN_RESTART); + break; + + case IN_SENSITIVITY_BUTTON: + if(menu_status == VIEW){ + load_menu_variables(IN_EXIT); + + }else{ // UPDATE + setup_var[0] = setup_var[0] >= 10 ? 1 : ++setup_var[0]; + } + break; + + case IN_PRESS_BUTTON: + if(menu_status == VIEW){ + load_menu_variables(IN_SENSITIVITY_BUTTON); + + }else{ // UPDATE + setup_var[0] = setup_var[0] <= 1 ? 3 : --setup_var[0]; + } + break; + + case IN_HOLD_DOWN_BUTTON: + if(menu_status == VIEW){ + load_menu_variables(IN_PRESS_BUTTON); + + }else{ // UPDATE + setup_var[0] = setup_var[0] <= 1 ? 2 : --setup_var[0]; + } + break; + + case IN_LAG: + if(menu_status == VIEW){ + load_menu_variables(IN_SENSITIVITY_BUTTON); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] >= 60 ? 0 : ++setup_var[0]; // Minutos + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Segundo + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] >= 9 ? 0 : ++setup_var[2]; // Decimas de segundo + } + break; + + case IN_DOSING: + if(menu_status == VIEW){ + load_menu_variables(IN_LAG); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] >= 60 ? 0 : ++setup_var[0]; // Minutos + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Segundo + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] >= 9 ? 0 : ++setup_var[2]; // Decimas de segundo + } + break; + + case IN_FACTORY_RESET: + if(menu_status == VIEW){ + load_menu_variables(IN_DOSING); + + }else{ // UPDATE + setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; + } + break; + + case IN_RESTART: + if(menu_status == VIEW){ + load_menu_variables(IN_FACTORY_RESET); + + }else{ // UPDATE + setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; + } + break; + + case IN_EXIT: + load_menu_variables(IN_FACTORY_RESET); + break; + } + break; + + case SETTING_BUTTON_DOWN_VAL: + switch(menu_section) { + case OUT_OF_MENU: + load_menu_variables(IN_SENSITIVITY_BUTTON); + break; + + case IN_SENSITIVITY_BUTTON: + if(menu_status == VIEW){ + load_menu_variables(IN_LAG); + + }else{ // UPDATE + setup_var[0] = setup_var[0] <= 1 ? 10 : --setup_var[0]; + } + break; + + case IN_PRESS_BUTTON: + if(menu_status == VIEW){ + load_menu_variables(IN_LAG); + + }else{ // UPDATE + setup_var[0] = setup_var[0] >= 3 ? 1 : ++setup_var[0]; + } + break; + + case IN_HOLD_DOWN_BUTTON: + if(menu_status == VIEW){ + load_menu_variables(IN_LAG); + + }else{ // UPDATE + setup_var[0] = setup_var[0] >= 2 ? 1 : ++setup_var[0]; + } + break; + + case IN_LAG: + if(menu_status == VIEW){ + load_menu_variables(IN_DOSING); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] <= 0 ? 60 : --setup_var[0]; // Minutos + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Segundo + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] <= 0 ? 9 : --setup_var[2]; // Decimas de segundo + } + break; + + case IN_DOSING: + if(menu_status == VIEW){ + load_menu_variables(IN_FACTORY_RESET); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] <= 0 ? 60 : --setup_var[0]; // Minutos + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Segundo + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] <= 0 ? 9 : --setup_var[2]; // Decimas de segundo + } + break; + + case IN_FACTORY_RESET: + if(menu_status == VIEW){ + load_menu_variables(IN_RESTART); + + }else{ // UPDATE + setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; + } + break; + + case IN_RESTART: + if(menu_status == VIEW){ + load_menu_variables(IN_EXIT); + + }else{ // UPDATE + setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; + } + break; + + case IN_EXIT: + load_menu_variables(IN_SENSITIVITY_BUTTON); + break; + } + break; + } + + refresh_lcd_menu = true; + last_change_menu_millis = millis(); + + serialPrint("button_value: "); + serialPrintln(button_value); + + serialPrint("menu_section: "); + serialPrint(menu_section); + serialPrint(", menu_status: "); + serialPrint(menu_status); + serialPrint(", menu_cursor_var: "); + serialPrint(menu_cursor_var); + serialPrint(", setup_var[0]: "); + serialPrint(setup_var[0]); + serialPrint(", setup_var[1]: "); + serialPrint(setup_var[1]); + serialPrint(", setup_var[2]: "); + serialPrintln(setup_var[2]); + } + + void save_setting(uint8_t _setting) + { + menu_status = VIEW; + menu_cursor_var = POSITION_ONE; + + switch(_setting){ + case IN_SENSITIVITY_BUTTON: + EEPROM.write(BUTTON_SENSITIVITY_EEPROM_ADDRESS, setup_var[0]); + + load_setting(IN_SENSITIVITY_BUTTON); + + serialPrintln("Save button_sensitivity_millis"); + break; + + case IN_PRESS_BUTTON: + EEPROM.write(PRESS_BUTTON_EEPROM_ADDRESS, setup_var[0]); + + load_setting(IN_PRESS_BUTTON); + + serialPrintln("Save press_button_mode"); + break; + + case IN_HOLD_DOWN_BUTTON: + EEPROM.write(HOLD_DOWN_BUTTON_EEPROM_ADDRESS, setup_var[0]); + + load_setting(IN_HOLD_DOWN_BUTTON); + + serialPrintln("Save hold_down_button_mode"); + break; + + case IN_LAG: + EEPROM.write(LAG_TIME_MIN_EEPROM_ADDRESS, setup_var[0]); + EEPROM.write(LAG_TIME_SEG_EEPROM_ADDRESS, setup_var[1]); + EEPROM.write(LAG_TIME_DEC_EEPROM_ADDRESS, setup_var[2]); + + load_setting(IN_LAG); + + serialPrintln("Save lag_time"); + break; + + case IN_DOSING: + EEPROM.write(DOSING_TIME_MIN_EEPROM_ADDRESS, setup_var[0]); + EEPROM.write(DOSING_TIME_SEG_EEPROM_ADDRESS, setup_var[1]); + EEPROM.write(DOSING_TIME_DEC_EEPROM_ADDRESS, setup_var[2]); + + load_setting(IN_DOSING); + + serialPrintln("Save dosing_time"); + break; + + case IN_FACTORY_RESET: + if(setup_var[0]){ + EEPROM.write(BUTTON_SENSITIVITY_EEPROM_ADDRESS, BUTTON_SENSITIVITY_DEFAULT_VALUE); + EEPROM.write(PRESS_BUTTON_EEPROM_ADDRESS, PRESS_BUTTON_DEFAULT_VALUE); + EEPROM.write(HOLD_DOWN_BUTTON_EEPROM_ADDRESS, HOLD_DOWN_BUTTON_DEFAULT_VALUE); + EEPROM.write(LAG_TIME_MIN_EEPROM_ADDRESS, LAG_TIME_MIN_DEFAULT_VALUE); + EEPROM.write(LAG_TIME_SEG_EEPROM_ADDRESS, LAG_TIME_SEG_DEFAULT_VALUE); + EEPROM.write(LAG_TIME_DEC_EEPROM_ADDRESS, LAG_TIME_DEC_DEFAULT_VALUE); + EEPROM.write(DOSING_TIME_MIN_EEPROM_ADDRESS, DOSING_TIME_MIN_DEFAULT_VALUE); + EEPROM.write(DOSING_TIME_SEG_EEPROM_ADDRESS, DOSING_TIME_SEG_DEFAULT_VALUE); + EEPROM.write(DOSING_TIME_DEC_EEPROM_ADDRESS, DOSING_TIME_DEC_DEFAULT_VALUE); + + load_setting(ALL_SETTINGS); + load_menu_variables(OUT_OF_MENU); + + serialPrintln("Restore factory settings"); + } + break; + + case IN_RESTART: + if(setup_var[0]){ + dispenser_status = DISPENSER_DOSING; + dispenser_status_time_millis = 0; + + load_menu_variables(OUT_OF_MENU); + + serialPrintln("Restart"); + } + break; + } + } + + void load_setting(uint8_t _setting) + { + switch(_setting){ + case ALL_SETTINGS: + load_setting(IN_SENSITIVITY_BUTTON); + load_setting(IN_PRESS_BUTTON); + load_setting(IN_HOLD_DOWN_BUTTON); + load_setting(IN_LAG); + load_setting(IN_DOSING); + break; + + case IN_SENSITIVITY_BUTTON: + button_sensitivity_millis = 1100 - (EEPROM.read(BUTTON_SENSITIVITY_EEPROM_ADDRESS) * 110); + + serialPrint("button_sensitivity_millis: "); + serialPrintln(button_sensitivity_millis); + break; + + case IN_PRESS_BUTTON: + press_button_mode = EEPROM.read(PRESS_BUTTON_EEPROM_ADDRESS); + + serialPrint("press_button_mode: "); + serialPrintln(press_button_mode); + break; + + case IN_HOLD_DOWN_BUTTON: + hold_down_button_mode = EEPROM.read(HOLD_DOWN_BUTTON_EEPROM_ADDRESS); + + serialPrint("hold_down_button_mode: "); + serialPrintln(hold_down_button_mode); + break; + + case IN_LAG: + lag_time_decseg = (EEPROM.read(LAG_TIME_SEG_EEPROM_ADDRESS) * 10) + EEPROM.read(LAG_TIME_DEC_EEPROM_ADDRESS); + + serialPrint("lag_time_decseg: "); + serialPrintln(lag_time_decseg); + break; + + case IN_DOSING: + dosing_time_decseg = (EEPROM.read(DOSING_TIME_MIN_EEPROM_ADDRESS) * 600) + (EEPROM.read(DOSING_TIME_SEG_EEPROM_ADDRESS) * 10) + EEPROM.read(DOSING_TIME_DEC_EEPROM_ADDRESS); + + serialPrint("dosing_time_decseg: "); + serialPrintln(dosing_time_decseg); + break; + } + } + + void load_menu_variables(uint8_t _menu_section) + { + menu_section = _menu_section; + menu_status = VIEW; + menu_cursor_var = POSITION_ONE; + + switch(_menu_section){ + case OUT_OF_MENU: + case IN_FACTORY_RESET: + case IN_RESTART: + setup_var[0] = 0; + setup_var[1] = 0; + setup_var[2] = 0; + break; + + case IN_SENSITIVITY_BUTTON: + setup_var[0] = EEPROM.read(BUTTON_SENSITIVITY_EEPROM_ADDRESS); + break; + + case IN_PRESS_BUTTON: + setup_var[0] = EEPROM.read(PRESS_BUTTON_EEPROM_ADDRESS); + break; + + case IN_HOLD_DOWN_BUTTON: + setup_var[0] = EEPROM.read(HOLD_DOWN_BUTTON_EEPROM_ADDRESS); + break; + + case IN_LAG: + setup_var[0] = EEPROM.read(LAG_TIME_MIN_EEPROM_ADDRESS); // Minutos + setup_var[1] = EEPROM.read(LAG_TIME_SEG_EEPROM_ADDRESS); // Segundos + setup_var[2] = EEPROM.read(LAG_TIME_DEC_EEPROM_ADDRESS); // Decimas de segundo + break; + + case IN_DOSING: + setup_var[0] = EEPROM.read(DOSING_TIME_MIN_EEPROM_ADDRESS); // Minutos + setup_var[1] = EEPROM.read(DOSING_TIME_SEG_EEPROM_ADDRESS); // Segundos + setup_var[2] = EEPROM.read(DOSING_TIME_DEC_EEPROM_ADDRESS); // Decimas de segundo + break; + } + } /************************************************** * LCD2004 rendering **************************************************/ - // Helpers - String fill_string_ws(String _text_info, uint8_t _length, uint8_t _first_spaces = 0, String _char = " ") - { - if(_text_info.length() >= _length) - return _text_info.substring(0, _length); + // Helpers + String fill_string_ws(String _text_info, uint8_t _length, uint8_t _first_spaces = 0, String _char = " ") + { + if(_text_info.length() >= _length) + return _text_info.substring(0, _length); - for(uint8_t i = 0; _first_spaces > i; i++) - if(_text_info.length() < _length) - _text_info = _char + _text_info; + for(uint8_t i = 0; _first_spaces > i; i++) + if(_text_info.length() < _length) + _text_info = _char + _text_info; - while(_text_info.length() < _length) - _text_info = _text_info + _char; - - return _text_info; - } + while(_text_info.length() < _length) + _text_info = _text_info + _char; + + return _text_info; + } - String min_seg_dec_to_string(uint8_t _min, uint8_t _seg, uint8_t _dec) - { - String min = String(_min < 10? "0": "") + String(_min); - String seg = String(_seg < 10? "0": "") + String(_seg); + String min_seg_dec_to_string(uint8_t _min, uint8_t _seg, uint8_t _dec) + { + String min = String(_min < 10? "0": "") + String(_min); + String seg = String(_seg < 10? "0": "") + String(_seg); - return min + ":" + seg + "." + String(_dec); - } + return min + ":" + seg + "." + String(_dec); + } - String process_time() - { - String process_time_string = "0"; + String process_time() + { + String process_time_string = "0"; - if(dispenser_status_time_millis - millis()){ - uint32_t min = (dispenser_status_time_millis - millis()) / 60000; - uint16_t seg = ((dispenser_status_time_millis - millis()) - (min * 60000)) / 1000; - uint8_t dec = ((dispenser_status_time_millis - millis()) - (min * 60000) - (seg * 1000)) / 100; + if(dispenser_status_time_millis - millis()){ + uint32_t min = (dispenser_status_time_millis - millis()) / 60000; + uint16_t seg = ((dispenser_status_time_millis - millis()) - (min * 60000)) / 1000; + uint8_t dec = ((dispenser_status_time_millis - millis()) - (min * 60000) - (seg * 1000)) / 100; - String _min = min >= 1? String(min) + ":": ""; - String _seg = (min >= 1 && seg <= 9? "0": "") + String(seg); + String _min = min >= 1? String(min) + ":": ""; + String _seg = (min >= 1 && seg <= 9? "0": "") + String(seg); - process_time_string = _min + _seg + "." + String(dec); - } + process_time_string = _min + _seg + "." + String(dec); + } - serialPrintln(process_time_string); + serialPrintln(process_time_string); - return process_time_string; - } + return process_time_string; + } - // Methods - void loop_screen_rendering() - { - if(refresh_lcd_menu){ - print_lcd_menu(); + // Methods + void loop_screen_rendering() + { + if(refresh_lcd_menu){ + print_lcd_menu(); - refresh_lcd_menu = false; - } + refresh_lcd_menu = false; + } - if(millis() % LCD_PROCESS_REFRESH_MILLIS == 0){ - print_lcd_process(); - setCursor_lcd_menu(); - } - } + if(millis() % LCD_PROCESS_REFRESH_MILLIS == 0){ + print_lcd_process(); + setCursor_lcd_menu(); + } + } - void print_lcd_menu() - { - lcd.noCursor(); + void print_lcd_menu() + { + lcd.noCursor(); - // Menú de configuraciones - lcd.setCursor(0, 0); + // Menú de configuraciones + lcd.setCursor(0, 0); - menu_section == OUT_OF_MENU? - lcd.print(fill_string_ws("", 20)): - lcd.print(fill_string_ws(menu[menu_section -1], 20)); + menu_section == OUT_OF_MENU? + lcd.print(fill_string_ws("", 20)): + lcd.print(fill_string_ws(menu[menu_section -1], 20)); - // Detalles de configuraciones - lcd.setCursor(0, 1); + // Detalles de configuraciones + lcd.setCursor(0, 1); - switch(menu_section){ - case OUT_OF_MENU: - lcd.print(fill_string_ws("", 20)); - break; + switch(menu_section){ + case OUT_OF_MENU: + lcd.print(fill_string_ws("", 20)); + break; - case IN_SENSITIVITY_BUTTON: - lcd.print(fill_string_ws(fill_string_ws(String(setup_var[0]), 2, 1, "0"), 20, 3)); - break; + case IN_SENSITIVITY_BUTTON: + lcd.print(fill_string_ws(fill_string_ws(String(setup_var[0]), 2, 1, "0"), 20, 3)); + break; - case IN_PRESS_BUTTON: - case IN_HOLD_DOWN_BUTTON: - switch(setup_var[0]){ - case 1: - lcd.print(fill_string_ws(text_info[MODE_1], 20, 3)); - break; + case IN_PRESS_BUTTON: + case IN_HOLD_DOWN_BUTTON: + switch(setup_var[0]){ + case 1: + lcd.print(fill_string_ws(text_info[MODE_1], 20, 3)); + break; - case 2: - lcd.print(fill_string_ws(text_info[MODE_2], 20, 3)); - break; + case 2: + lcd.print(fill_string_ws(text_info[MODE_2], 20, 3)); + break; - case 3: - lcd.print(fill_string_ws(text_info[MODE_3], 20, 3)); - break; - } - break; + case 3: + lcd.print(fill_string_ws(text_info[MODE_3], 20, 3)); + break; + } + break; - case IN_LAG: - case IN_DOSING: - lcd.print(fill_string_ws(min_seg_dec_to_string(setup_var[0], setup_var[1], setup_var[2]), 20, 3)); - break; + case IN_LAG: + case IN_DOSING: + lcd.print(fill_string_ws(min_seg_dec_to_string(setup_var[0], setup_var[1], setup_var[2]), 20, 3)); + break; - case IN_FACTORY_RESET: - if(menu_status == UPDATE){ - setup_var[0]? - lcd.print(fill_string_ws(text_info[FACTORY_RESET], 20, 3)): - lcd.print(fill_string_ws(text_info[CANCEL], 20, 3)); + case IN_FACTORY_RESET: + if(menu_status == UPDATE){ + setup_var[0]? + lcd.print(fill_string_ws(text_info[FACTORY_RESET], 20, 3)): + lcd.print(fill_string_ws(text_info[CANCEL], 20, 3)); - }else - lcd.print(fill_string_ws("", 20)); - break; + }else + lcd.print(fill_string_ws("", 20)); + break; - case IN_RESTART: - if(menu_status == UPDATE){ - setup_var[0]? - lcd.print(fill_string_ws(text_info[RESTART], 20, 3)): - lcd.print(fill_string_ws(text_info[CANCEL], 20, 3)); + case IN_RESTART: + if(menu_status == UPDATE){ + setup_var[0]? + lcd.print(fill_string_ws(text_info[RESTART], 20, 3)): + lcd.print(fill_string_ws(text_info[CANCEL], 20, 3)); - }else - lcd.print(fill_string_ws("", 20)); - break; - } + }else + lcd.print(fill_string_ws("", 20)); + break; + } - // Limpiamos línea de proceso - if(menu_status == UPDATE){ - lcd.setCursor(0, 2); - lcd.print(fill_string_ws("", 20)); + // Limpiamos línea de proceso + if(menu_status == UPDATE){ + lcd.setCursor(0, 2); + lcd.print(fill_string_ws("", 20)); - lcd.setCursor(0, 3); - lcd.print(fill_string_ws("", 20)); - } - } + lcd.setCursor(0, 3); + lcd.print(fill_string_ws("", 20)); + } + } - void print_lcd_process() - { - if(menu_section == OUT_OF_MENU || menu_status == VIEW){ - lcd.setCursor(0, 2); + void print_lcd_process() + { + if(menu_section == OUT_OF_MENU || menu_status == VIEW){ + lcd.setCursor(0, 2); - lcd.print(status[dispenser_status]); + lcd.print(status[dispenser_status]); - switch(dispenser_status){ - case DISPENSER_IDLE: - if(millis() >= blink_millis) - blink_millis = millis() + (BLINK_MILLIS * 2); - - lcd.print(fill_string_ws(blink_millis - millis() >= BLINK_MILLIS? "": "***", 11, 2)); - break; + switch(dispenser_status){ + case DISPENSER_IDLE: + if(millis() >= blink_millis) + blink_millis = millis() + (BLINK_MILLIS * 2); + + lcd.print(fill_string_ws(blink_millis - millis() >= BLINK_MILLIS? "": "***", 11, 2)); + break; - case DISPENSER_LAG: - lcd.print(fill_string_ws(process_time(), 8, 2)); - break; + case DISPENSER_LAG: + lcd.print(fill_string_ws(process_time(), 8, 2)); + break; - case DISPENSER_DOSING: - lcd.print(fill_string_ws(process_time(), 8, 1)); - break; + case DISPENSER_DOSING: + lcd.print(fill_string_ws(process_time(), 8, 1)); + break; - case DISPENSER_BLOCK: - //lcd.print(fill_string_ws(process_time(), 8, 1)); - break; - } - } - } + case DISPENSER_BLOCK: + //lcd.print(fill_string_ws(process_time(), 8, 1)); + break; + } + } + } - void setCursor_lcd_menu() - { - if(menu_status == UPDATE){ - switch(menu_section){ - case OUT_OF_MENU: - break; + void setCursor_lcd_menu() + { + if(menu_status == UPDATE){ + switch(menu_section){ + case OUT_OF_MENU: + break; - case IN_LAG: - case IN_DOSING: - // Posicionamos el cursos, para la edición - if(menu_cursor_var == POSITION_ONE) - lcd.setCursor(3,1); + case IN_LAG: + case IN_DOSING: + // Posicionamos el cursos, para la edición + if(menu_cursor_var == POSITION_ONE) + lcd.setCursor(3,1); - else if(menu_cursor_var == POSITION_TWO) - lcd.setCursor(6,1); + else if(menu_cursor_var == POSITION_TWO) + lcd.setCursor(6,1); - else if(menu_cursor_var == POSITION_THREE) - lcd.setCursor(9,1); - break; + else if(menu_cursor_var == POSITION_THREE) + lcd.setCursor(9,1); + break; - case IN_SENSITIVITY_BUTTON: - case IN_PRESS_BUTTON: - case IN_HOLD_DOWN_BUTTON: - case IN_FACTORY_RESET: - case IN_RESTART: - lcd.setCursor(3,1); - break; - } + case IN_SENSITIVITY_BUTTON: + case IN_PRESS_BUTTON: + case IN_HOLD_DOWN_BUTTON: + case IN_FACTORY_RESET: + case IN_RESTART: + lcd.setCursor(3,1); + break; + } - lcd.cursor(); - } - } + lcd.cursor(); + } + } /************************************************** * DOSAGE PROCESS **************************************************/ - void loop_dosage_process() - { - if(digitalRead(DOSING_BUTTON_PIN) == DOSING_BUTTON_PUSH){ - if(button_pressed_millis == 0) - button_pressed_millis = millis(); + void loop_dosage_process() + { + if(digitalRead(DOSING_BUTTON_PIN) == DOSING_BUTTON_PUSH){ + if(button_pressed_millis == 0) + button_pressed_millis = millis(); - // Se supero el button_sensitivity_millis - if (millis() >= (button_pressed_millis + button_sensitivity_millis)) - start_dosing_process(); + // Se supero el button_sensitivity_millis + if (millis() >= (button_pressed_millis + button_sensitivity_millis)) + start_dosing_process(); - }else{ + }else{ - release_button = 0; - button_pressed_millis = 0; - } + release_button = 0; + button_pressed_millis = 0; + } - continue_dosing_process(); - } + continue_dosing_process(); + } - void start_dosing_process() - { + void start_dosing_process() + { + /* + Modo 1: + Modo 2: + Modo 3: + */ + + /* + if(press_button_mode == 3 && + dispenser_status != DISPENSER_IDLE && + dispenser_status_time_millis >= button_pressed_millis && + release_button == 0){ + + dispenser_status = DISPENSER_DOSING; + dispenser_status_time_millis = 0; + + serialPrint("Proceso detenido"); + serialPrintln(millis()); + }else if((press_button_mode == 1 || press_button_mode == 3) && dispenser_status == DISPENSER_IDLE){ + dispenser_status = DISPENSER_LAG; + dispenser_status_time_millis = millis() + ((uint32_t) lag_time_decseg * 100); - if(press_button_mode == 3 && - dispenser_status != DISPENSER_IDLE && - dispenser_status_time_millis >= button_pressed_millis && - release_button == 0){ + release_button = 1; - dispenser_status = DISPENSER_DOSING; - dispenser_status_time_millis = 0; + serialPrint("Iniciando proceso "); + serialPrintln(millis()); - serialPrint("Proceso detenido"); - serialPrintln(millis()); + }else if(press_button_mode == 2){ + dispenser_status = DISPENSER_RESTART; + release_button = 1; + } + */ + switch(press_button_mode){ + case 1: + dispenser_status = DISPENSER_RESTART; - }else if((press_button_mode == 1 || press_button_mode == 3) && dispenser_status == DISPENSER_IDLE){ - dispenser_status = DISPENSER_LAG; - dispenser_status_time_millis = millis() + ((uint32_t) lag_time_decseg * 100); + serialPrintln("Modo 1 "); + break; - release_button = 1; + case 2: + dispenser_status = DISPENSER_RESTART; - serialPrint("Iniciando proceso "); - serialPrintln(millis()); + serialPrintln("Modo 2 "); + break; - }else if(press_button_mode == 2){ - dispenser_status = DISPENSER_RESTART; + case 3: + dispenser_status = DISPENSER_RESTART; - release_button = 1; - } - } + serialPrintln("Modo 3 "); + break; + } + } - void continue_dosing_process() - { - switch(dispenser_status){ - case DISPENSER_RESTART: - digitalWrite(RELAY_PIN, RELAY_LOW); + void continue_dosing_process() + { + switch(dispenser_status){ + case DISPENSER_RESTART: + digitalWrite(RELAY_PIN, RELAY_LOW); - dispenser_status = DISPENSER_LAG; - dispenser_status_time_millis = millis() + ((uint32_t) lag_time_decseg * 100); - break; + dispenser_status = DISPENSER_LAG; + dispenser_status_time_millis = millis() + ((uint32_t) lag_time_decseg * 100); + break; - case DISPENSER_LAG: - if(millis() >= dispenser_status_time_millis){ - dispenser_status = DISPENSER_DOSING; - dispenser_status_time_millis = millis() + ((uint32_t) dosing_time_decseg * 100); + case DISPENSER_LAG: + if(millis() >= dispenser_status_time_millis){ + dispenser_status = DISPENSER_DOSING; + dispenser_status_time_millis = millis() + ((uint32_t) dosing_time_decseg * 100); - digitalWrite(RELAY_PIN, RELAY_HIGH); - } - break; + digitalWrite(RELAY_PIN, RELAY_HIGH); + } + break; - case DISPENSER_DOSING: - if(millis() >= dispenser_status_time_millis){ - dispenser_status = button_pressed_millis == 0? DISPENSER_IDLE: DISPENSER_BLOCK; - dispenser_status_time_millis = 0; + case DISPENSER_DOSING: + if(millis() >= dispenser_status_time_millis){ + dispenser_status = button_pressed_millis == 0? DISPENSER_IDLE: DISPENSER_BLOCK; + dispenser_status_time_millis = 0; - digitalWrite(RELAY_PIN, RELAY_LOW); - } - break; + digitalWrite(RELAY_PIN, RELAY_LOW); + } + break; - case DISPENSER_BLOCK: - if(button_pressed_millis == 0) - dispenser_status = DISPENSER_IDLE; - break; - } - } + case DISPENSER_BLOCK: + if(button_pressed_millis == 0) + dispenser_status = DISPENSER_IDLE; + break; + } + } /************************************************** * Setup & Loops **************************************************/ - void setup() - { - pinMode(RELAY_PIN, OUTPUT); - pinMode(DOSING_BUTTON_PIN, INPUT_PULLUP); - pinMode(SETTINGS_BUTTONS_PIN, INPUT_PULLUP); + void setup() + { + pinMode(RELAY_PIN, OUTPUT); + pinMode(DOSING_BUTTON_PIN, INPUT_PULLUP); + pinMode(SETTINGS_BUTTONS_PIN, INPUT_PULLUP); - // Salida Serial - serialBegin(9600); - serialBeginWhile(); + // Salida Serial + serialBegin(9600); + serialBeginWhile(); - // Cargamos configuraciones de la EEPROM a la ram - load_setting(ALL_SETTINGS); + // Cargamos configuraciones de la EEPROM a la ram + load_setting(ALL_SETTINGS); - //Iniciamos la pantalla - lcd.begin(20, 4); - } + //Iniciamos la pantalla + lcd.begin(20, 4); + } - void loop() - { - loop_settings_panel_buttons(); - loop_dosage_process(); - loop_screen_rendering(); - } + void loop() + { + loop_settings_panel_buttons(); + loop_dosage_process(); + loop_screen_rendering(); + } diff --git a/LiquidCrystal/FastIO.cpp b/LiquidCrystal/FastIO.cpp new file mode 100644 index 0000000..18c8ac5 --- /dev/null +++ b/LiquidCrystal/FastIO.cpp @@ -0,0 +1,267 @@ +// --------------------------------------------------------------------------- +// Created by Florian Fida on 20/01/12 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// http://creativecommons.org/licenses/by-sa/3.0/ +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// --------------------------------------------------------------------------- +// fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black +// (http://www.romanblack.com/shift1.htm) +// +// Thread Safe: No +// Extendable: Yes +// +// @file FastIO.h +// This file implements basic fast IO routines. +// +// @brief +// +// @version API 1.0.0 +// +// @author Florian Fida - +// +// 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster +// +// @todo: +// support chipkit: +// (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/ +// cores/pic32/wiring_digital.c) +// --------------------------------------------------------------------------- +#include "FastIO.h" + + +fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state) +{ + pinMode(pin, OUTPUT); + + if(initial_state != SKIP) + { + digitalWrite(pin, initial_state); // also turns off pwm timer + } +#ifdef FIO_FALLBACK + // just wasting memory if not using fast io... + return 0; +#else + return portOutputRegister(digitalPinToPort(pin)); +#endif +} + + +fio_register fio_pinToInputRegister(uint8_t pin) +{ + pinMode(pin, INPUT); + digitalWrite(pin, LOW); // also turns off pwm timer and pullup +#ifdef FIO_FALLBACK + // just wasting memory if not using fast io... + return 0; +#else + return portInputRegister(digitalPinToPort(pin)); +#endif +} + + +fio_bit fio_pinToBit(uint8_t pin) +{ +#ifdef FIO_FALLBACK + // (ab)use the bit variable to store the pin + return pin; +#else + return digitalPinToBitMask(pin); +#endif +} + + +void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value) +{ +#ifdef FIO_FALLBACK + digitalWrite(pinBit, value); +#else + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + if(value == LOW) + { + fio_digitalWrite_LOW(pinRegister,pinBit); + } + else + { + fio_digitalWrite_HIGH(pinRegister,pinBit); + } + } +#endif +} + +int fio_digitalRead(fio_register pinRegister, uint8_t pinBit) +{ +#ifdef FIO_FALLBACK + return digitalRead (pinBit); +#else + if (*pinRegister & pinBit) + { + return HIGH; + } + return LOW; +#endif +} + +void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, + fio_register clockRegister, fio_bit clockBit, + uint8_t value, uint8_t bitOrder) +{ + // # disable interrupts + int8_t i; + + if(bitOrder == LSBFIRST) + { + for(i = 0; i < 8; i++) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + if(value & 1) + { + fio_digitalWrite_HIGH(dataRegister, dataBit); + } + else + { + fio_digitalWrite_LOW(dataRegister, dataBit); + } + value >>= 1; + fio_digitalWrite_HIGH (clockRegister, clockBit); + fio_digitalWrite_LOW (clockRegister,clockBit); + } + } + + } + else + { + for(i = 0; i < 8; i++) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + if(value & 0x80) + { + fio_digitalWrite_HIGH(dataRegister, dataBit); + } + else + { + fio_digitalWrite_LOW(dataRegister, dataBit); + } + value <<= 1; + fio_digitalWrite_HIGH (clockRegister, clockBit); + fio_digitalWrite_LOW (clockRegister,clockBit); + } + } + } +} + + +void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, + fio_register clockRegister, fio_bit clockBit) +{ + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // shift out 0x0 (B00000000) fast, byte order is irrelevant + fio_digitalWrite_LOW (dataRegister, dataBit); + + for(uint8_t i = 0; i<8; ++i) + { + fio_digitalWrite_HIGH (clockRegister, clockBit); + fio_digitalWrite_SWITCH (clockRegister, clockBit); + } + } +} + + +void fio_shiftOut1_init(uint8_t pin) +{ + fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin)); +} + +void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit) +{ + // Make sure that capacitors are charged + // 300us is an educated guess... + fio_digitalWrite(shift1Register,shift1Bit,HIGH); + delayMicroseconds(300); +} + + +void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, + boolean noLatch) +{ + /* + * this function are based on Shif1 protocol developed by Roman Black + * (http://www.romanblack.com/shift1.htm) + * + * test sketches: + * http://pastebin.com/raw.php?i=2hnC9v2Z + * http://pastebin.com/raw.php?i=bGg4DhXQ + * http://pastebin.com/raw.php?i=tg1ZFiM5 + * http://pastebin.com/raw.php?i=93ExPDD3 - cascading + * tested with: + * TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/ + * arduino-one-wire-shift-register-prototype) + * 7HC595N + */ + + // iterate but ignore last bit (is it correct now?) + for(int8_t i = 7; i>=0; --i) + { + + // assume that pin is HIGH (smokin' pot all day... :) - requires + // initialization + if(value & _BV(i)) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // HIGH = 1 Bit + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); + //hold pin LOW for 1us - done! :) + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH); + } // end critical section + //hold pin HIGH for 15us + delayMicroseconds(15); + } + else + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // LOW = 0 Bit + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); + // hold pin LOW for 15us + delayMicroseconds(15); + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH); + } // end critical section + + // hold pin HIGH for 30us + delayMicroseconds(30); + } + if(!noLatch && i==1) + { + break; + } + } + + if(!noLatch) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // send last bit (=LOW) and Latch command + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); + } // end critical section + delayMicroseconds(199); // Hold pin low for 200us + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(shift1Register,shift1Bit); + } // end critical section + delayMicroseconds(299); // Hold pin high for 300us and leave it that + // way - using explicit HIGH here, just in case. + } +} + +void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch) +{ + fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch); +} diff --git a/LiquidCrystal/FastIO.h b/LiquidCrystal/FastIO.h new file mode 100644 index 0000000..8636e20 --- /dev/null +++ b/LiquidCrystal/FastIO.h @@ -0,0 +1,219 @@ +// --------------------------------------------------------------------------- +// Created by Florian Fida on 20/01/12 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// http://creativecommons.org/licenses/by-sa/3.0/ +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// --------------------------------------------------------------------------- +// fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black +// (http://www.romanblack.com/shift1.htm) +// +// Thread Safe: No +// Extendable: Yes +// +// @file FastIO.h +// This file implements basic fast IO routines. +// +// @brief +// +// @version API 1.0.0 +// +// @author Florian Fida - +// 2012-03-16 bperrybap mods for chipkit32 (pic32) Arduino +// support chipkit: +// (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/ +// cores/pic32/wiring_digital.c) +// --------------------------------------------------------------------------- +#ifndef _FAST_IO_H_ +#define _FAST_IO_H_ + +#if (ARDUINO < 100) +#include +#else +#include +#endif + +#include // pleasing sanguino core +#include + + +#define SKIP 0x23 + +#if defined (__AVR__) +#include // for critical section management +typedef uint8_t fio_bit; +typedef volatile uint8_t *fio_register; + + +#elif defined(__PIC32MX__) +typedef uint32_t fio_bit; +typedef volatile uint32_t *fio_register; + + +#else +// fallback to Arduino standard digital i/o routines +#define FIO_FALLBACK +#define ATOMIC_BLOCK(dummy) if(true) +#define ATOMIC_RESTORESTATE +typedef uint8_t fio_bit; +typedef uint8_t fio_register; +#endif + + + +#if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK) +/* + * Define an ATOMIC_BLOCK that implements ATOMIC_FORCEON type + * Using the portable Arduino interrupts() and noInterrupts() + */ +#define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet. +#define ATOMIC_FORCEON uint8_t sreg_save \ + __attribute__((__cleanup__(__iSeiParam))) = 0 + +static __inline__ uint8_t __iCliRetVal(void) +{ + noInterrupts(); + return(1); +} +static __inline__ void __iSeiParam(const uint8_t *__s) +{ + interrupts(); +} +#define ATOMIC_BLOCK(type) for(type, __Todo = __iCliRetVal(); __Todo; __Todo = 0) + +#endif // end of block to create compatible ATOMIC_BLOCK() + + + +/*! + @function + @abstract Get the output register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register + */ +fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW); + +/*! + @function + @abstract Get the input register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register + */ +fio_register fio_pinToInputRegister(uint8_t pin); + +/*! + @function + @abstract Find the bit which belongs to specified pin + @discussion if fast digitalWrite is disabled this function returns the pin + @param pin[in] Number of a digital pin + @result Bit + */ +fio_bit fio_pinToBit(uint8_t pin); + + +/*! + @method + @abstract direct digital write + @discussion without any checks + @discussion falls back to normal digitalWrite if fast io is disabled + @param pinRegister[in] Register - ignored if fast digital write is disabled + @param pinBit[in] Bit - Pin if fast digital write is disabled + @param value[in] desired output + */ +// __attribute__ ((always_inline)) /* let the optimizer decide that for now */ +void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value ); + +/** + * This is where the magic happens that makes things fast. + * Implemented as preprocessor directives to force inlining + * SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. + */ + +#ifndef FIO_FALLBACK +#define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit +#define fio_digitalWrite_HIGH(reg,bit) *reg |= bit +#define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit +#define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit) +#else +// reg -> dummy NULL, bit -> pin +#define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH) +#define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW) +#define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit)) +#define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val); +#endif + +/*! + @function + @abstract direct digital read + @discussion without any checks + @discussion falls back to normal digitalRead if fast io is disabled + @param pinRegister[in] Register - ignored if fast io is disabled + @param pinBit[in] Bit - Pin if fast io is disabled + @result Value read from pin + */ +int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit ); + +/*! + @method + @abstract faster shift out + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + @param bitOrder[in] bit order + */ +void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, + fio_bit clockBit, uint8_t value, uint8_t bitOrder ); + +/*! + @method + @abstract faster shift out clear + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + */ +void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit); + +/*! + * @method + * @abstract one wire shift out + * @discussion protocol needs initialisation (fio_shiftOut1_init) + * @param shift1Register[in] pins register + * @param shift1Bit[in] pins bit + * @param value[in] value to shift out, last byte is ignored and always shifted out LOW + */ +void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false); +/*! + * @method + * @abstract one wire shift out + * @discussion protocol needs initialisation (fio_shiftOut1_init) + * @param pin[in] digital pin + * @param value[in] value to shift out, last byte is ignored and always shifted out LOW + */ +void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false); +/*! + * @method + * @abstract initializes one wire shift out protocol + * @discussion Puts pin to HIGH state and delays until Capacitors are charged. + * @param shift1Register[in] pins register + * @param shift1Bit[in] pins bit + */ +void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit); +/*! + * @method + * @abstract initializes one wire shift out protocol + * @discussion Puts pin to HIGH state and delays until Capacitors are charged. + * @param pin[in] digital pin + */ +void fio_shiftOut1_init(uint8_t pin); + +#endif // FAST_IO_H diff --git a/LiquidCrystal/I2CIO.cpp b/LiquidCrystal/I2CIO.cpp new file mode 100644 index 0000000..ddda7d3 --- /dev/null +++ b/LiquidCrystal/I2CIO.cpp @@ -0,0 +1,198 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file I2CIO.h +// This file implements a basic IO library using the PCF8574 I2C IO Expander +// chip. +// +// @brief +// Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC. +// The library implements basic IO general methods to configure IO pin direction +// read and write uint8_t operations and basic pin level routines to set or read +// a particular IO port. +// +// +// @version API 1.0.0 +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#if (ARDUINO < 100) +#include +#else +#include +#endif + +#include + +#include +#include "I2CIO.h" + +// CLASS VARIABLES +// --------------------------------------------------------------------------- + + +// CONSTRUCTOR +// --------------------------------------------------------------------------- +I2CIO::I2CIO ( ) +{ + _i2cAddr = 0x0; + _dirMask = 0xFF; // mark all as INPUTs + _shadow = 0x0; // no values set + _initialised = false; +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + +// +// begin +int I2CIO::begin ( uint8_t i2cAddr ) +{ + _i2cAddr = i2cAddr; + + Wire.begin ( ); + + _initialised = Wire.requestFrom ( _i2cAddr, (uint8_t)1 ); + +#if (ARDUINO < 100) + _shadow = Wire.receive (); +#else + _shadow = Wire.read (); // Remove the byte read don't need it. +#endif + + return ( _initialised ); +} + +// +// pinMode +void I2CIO::pinMode ( uint8_t pin, uint8_t dir ) +{ + if ( _initialised ) + { + if ( OUTPUT == dir ) + { + _dirMask &= ~( 1 << pin ); + } + else + { + _dirMask |= ( 1 << pin ); + } + } +} + +// +// portMode +void I2CIO::portMode ( uint8_t dir ) +{ + + if ( _initialised ) + { + if ( dir == INPUT ) + { + _dirMask = 0xFF; + } + else + { + _dirMask = 0x00; + } + } +} + +// +// read +uint8_t I2CIO::read ( void ) +{ + uint8_t retVal = 0; + + if ( _initialised ) + { + Wire.requestFrom ( _i2cAddr, (uint8_t)1 ); +#if (ARDUINO < 100) + retVal = ( _dirMask & Wire.receive ( ) ); +#else + retVal = ( _dirMask & Wire.read ( ) ); +#endif + + } + return ( retVal ); +} + +// +// write +int I2CIO::write ( uint8_t value ) +{ + int status = 0; + + if ( _initialised ) + { + // Only write HIGH the values of the ports that have been initialised as + // outputs updating the output shadow of the device + _shadow = ( value & ~(_dirMask) ); + + Wire.beginTransmission ( _i2cAddr ); +#if (ARDUINO < 100) + Wire.send ( _shadow ); +#else + Wire.write ( _shadow ); +#endif + status = Wire.endTransmission (); + } + return ( (status == 0) ); +} + +// +// digitalRead +uint8_t I2CIO::digitalRead ( uint8_t pin ) +{ + uint8_t pinVal = 0; + + // Check if initialised and that the pin is within range of the device + // ------------------------------------------------------------------- + if ( ( _initialised ) && ( pin <= 7 ) ) + { + // Remove the values which are not inputs and get the value of the pin + pinVal = this->read() & _dirMask; + pinVal = ( pinVal >> pin ) & 0x01; // Get the pin value + } + return (pinVal); +} + +// +// digitalWrite +int I2CIO::digitalWrite ( uint8_t pin, uint8_t level ) +{ + uint8_t writeVal; + int status = 0; + + // Check if initialised and that the pin is within range of the device + // ------------------------------------------------------------------- + if ( ( _initialised ) && ( pin <= 7 ) ) + { + // Only write to HIGH the port if the port has been configured as + // an OUTPUT pin. Add the new state of the pin to the shadow + writeVal = ( 1 << pin ) & ~_dirMask; + if ( level == HIGH ) + { + _shadow |= writeVal; + + } + else + { + _shadow &= ~writeVal; + } + status = this->write ( _shadow ); + } + return ( status ); +} + +// +// PRIVATE METHODS +// --------------------------------------------------------------------------- diff --git a/LiquidCrystal/I2CIO.h b/LiquidCrystal/I2CIO.h new file mode 100644 index 0000000..e05f16b --- /dev/null +++ b/LiquidCrystal/I2CIO.h @@ -0,0 +1,148 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file I2CIO.h +// This file implements a basic IO library using the PCF8574 I2C IO Expander +// chip. +// +// @brief +// Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC. +// The library implements basic IO general methods to configure IO pin direction +// read and write uint8_t operations and basic pin level routines to set or read +// a particular IO port. +// +// @version API 1.0.0 +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- + +#ifndef _I2CIO_H_ +#define _I2CIO_H_ + +#include + +#define _I2CIO_VERSION "1.0.0" + +/*! + @class + @abstract I2CIO + @discussion Library driver to control PCF8574 based ASICs. Implementing + library calls to set/get port through I2C bus. + */ + +class I2CIO +{ +public: + /*! + @method + @abstract Constructor method + @discussion Class constructor constructor. + */ + I2CIO ( ); + + /*! + @method + @abstract Initializes the device. + @discussion This method initializes the device allocating an I2C address. + This method is the first method that should be call prior to calling any + other method form this class. On initialization all pins are configured + as INPUT on the device. + + @param i2cAddr: I2C Address where the device is located. + @result 1 if the device was initialized correctly, 0 otherwise + */ + int begin ( uint8_t i2cAddr ); + + /*! + @method + @abstract Sets the mode of a particular pin. + @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite + has no effect on pins which are not declared as output. + + @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 + @param dir[in] Pin direction (INPUT, OUTPUT). + */ + void pinMode ( uint8_t pin, uint8_t dir ); + + /*! + @method + @abstract Sets all the pins of the device in a particular direction. + @discussion This method sets all the pins of the device in a particular + direction. This method is useful to set all the pins of the device to be + either inputs or outputs. + @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). + */ + void portMode ( uint8_t dir ); + + /*! + @method + @abstract Reads all the pins of the device that are configured as INPUT. + @discussion Reads from the device the status of the pins that are configured + as INPUT. During initialization all pins are configured as INPUTs by default. + Please refer to pinMode or portMode. + + @param none + */ + uint8_t read ( void ); + + /*! + @method + @abstract Read a pin from the device. + @discussion Reads a particular pin from the device. To read a particular + pin it has to be configured as INPUT. During initialization all pins are + configured as INPUTs by default. Please refer to pinMode or portMode. + + @param pin[in] Pin from the port to read its status. Range (0..7) + @result Returns the pin status (HIGH, LOW) if the pin is configured + as an output, reading its value will always return LOW regardless of its + real state. + */ + uint8_t digitalRead ( uint8_t pin ); + + /*! + @method + @abstract Write a value to the device. + @discussion Writes to a set of pins in the device. The value is the binary + representation of all the pins in device. The value written is masked with + the configuration of the direction of the pins; to change the state of + a particular pin with this method, such pin has to be configured as OUTPUT + using the portMode or pinMode methods. If no pins have been configured as + OUTPUTs this method will have no effect. + + @param value[in] value to be written to the device. + @result 1 on success, 0 otherwise + */ + int write ( uint8_t value ); + + /*! + @method + @abstract Writes a digital level to a particular pin. + @discussion Write a level to the indicated pin of the device. For this + method to have effect, the pin has to be configured as OUTPUT using the + pinMode or portMode methods. + + @param pin[in] device pin to change level. Range (0..7). + @para level[in] logic level to set the pin at (HIGH, LOW). + @result 1 on success, 0 otherwise. + */ + int digitalWrite ( uint8_t pin, uint8_t level ); + + + +private: + uint8_t _shadow; // Shadow output + uint8_t _dirMask; // Direction mask + uint8_t _i2cAddr; // I2C address + bool _initialised; // Initialised object + +}; + +#endif \ No newline at end of file diff --git a/LiquidCrystal/LCD.cpp b/LiquidCrystal/LCD.cpp new file mode 100644 index 0000000..373f529 --- /dev/null +++ b/LiquidCrystal/LCD.cpp @@ -0,0 +1,347 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LCD.cpp +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the HD44780 library of the +// Arduino SDK. This library is a refactored version of the one supplied +// in the Arduino SDK in such a way that it simplifies its extension +// to support other mechanism to communicate to LCDs such as I2C, Serial, SR, ... +// The original library has been reworked in such a way that this will be +// the base class implementing all generic methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets. +// +// This base class is a pure abstract class and needs to be extended. As reference, +// it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension +// backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. +// +// +// @version API 1.1.0 +// +// 2012.03.29 bperrybap - changed comparision to use LCD_5x8DOTS rather than 0 +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LCD.h" + +// CLASS CONSTRUCTORS +// --------------------------------------------------------------------------- +// Constructor +LCD::LCD () +{ + +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). +// A call to begin() will reinitialize the LCD. +// +void LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) +{ + if (lines > 1) + { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + _cols = cols; + + // for some 1 line displays you can select a 10 pixel high font + // ------------------------------------------------------------ + if ((dotsize != LCD_5x8DOTS) && (lines == 1)) + { + _displayfunction |= LCD_5x10DOTS; + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40ms after power rises above 2.7V + // before sending commands. Arduino can turn on way before 4.5V so we'll wait + // 50 + // --------------------------------------------------------------------------- + delay (100); // 100ms delay + + //put the LCD into 4 bit or 8 bit mode + // ------------------------------------- + if (! (_displayfunction & LCD_8BITMODE)) + { + // this is according to the hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + send(0x03, FOUR_BITS); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + send ( 0x03, FOUR_BITS ); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + send( 0x03, FOUR_BITS ); + delayMicroseconds(150); + + // finally, set to 4-bit interface + send ( 0x02, FOUR_BITS ); + } + else + { + // this is according to the hitachi HD44780 datasheet + // page 45 figure 23 + + // Send function set command sequence + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(4500); // wait more than 4.1ms + + // second try + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(150); + + // third go + command(LCD_FUNCTIONSET | _displayfunction); + } + + // finally, set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear the LCD + clear(); + + // Initialize to default text direction (for romance languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + + backlight(); + +} + +// Common LCD Commands +// --------------------------------------------------------------------------- +void LCD::clear() +{ + command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero + delayMicroseconds(HOME_CLEAR_EXEC); // this command is time consuming +} + +void LCD::home() +{ + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(HOME_CLEAR_EXEC); // This command is time consuming +} + +void LCD::setCursor(uint8_t col, uint8_t row) +{ + const byte row_offsetsDef[] = { 0x00, 0x40, 0x14, 0x54 }; // For regular LCDs + const byte row_offsetsLarge[] = { 0x00, 0x40, 0x10, 0x50 }; // For 16x4 LCDs + + if ( row >= _numlines ) + { + row = _numlines-1; // rows start at 0 + } + + // 16x4 LCDs have special memory map layout + // ---------------------------------------- + if ( _cols == 16 && _numlines == 4 ) + { + command(LCD_SETDDRAMADDR | (col + row_offsetsLarge[row])); + } + else + { + command(LCD_SETDDRAMADDR | (col + row_offsetsDef[row])); + } + +} + +// Turn the display on/off +void LCD::noDisplay() +{ + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +void LCD::display() +{ + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LCD::noCursor() +{ + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LCD::cursor() +{ + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns on/off the blinking cursor +void LCD::noBlink() +{ + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +void LCD::blink() +{ + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LCD::scrollDisplayLeft(void) +{ + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} + +void LCD::scrollDisplayRight(void) +{ + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LCD::leftToRight(void) +{ + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LCD::rightToLeft(void) +{ + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This method moves the cursor one space to the right +void LCD::moveCursorRight(void) +{ + command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVERIGHT); +} + +// This method moves the cursor one space to the left +void LCD::moveCursorLeft(void) +{ + command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVELEFT); +} + + +// This will 'right justify' text from the cursor +void LCD::autoscroll(void) +{ + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LCD::noAutoscroll(void) +{ + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Write to CGRAM of new characters +void LCD::createChar(uint8_t location, uint8_t charmap[]) +{ + location &= 0x7; // we only have 8 locations 0-7 + + command(LCD_SETCGRAMADDR | (location << 3)); + delayMicroseconds(30); + + for (int i=0; i<8; i++) + { + write(charmap[i]); // call the virtual write method + delayMicroseconds(40); + } +} + +// +// Switch on the backlight +void LCD::backlight ( void ) +{ + setBacklight(255); +} + +// +// Switch off the backlight +void LCD::noBacklight ( void ) +{ + setBacklight(0); +} + +// +// Switch fully on the LCD (backlight and LCD) +void LCD::on ( void ) +{ + display(); + backlight(); +} + +// +// Switch fully off the LCD (backlight and LCD) +void LCD::off ( void ) +{ + noBacklight(); + noDisplay(); +} + +// General LCD commands - generic methods used by the rest of the commands +// --------------------------------------------------------------------------- +void LCD::command(uint8_t value) +{ + send(value, COMMAND); +} + +#if (ARDUINO < 100) +void LCD::write(uint8_t value) +{ + send(value, DATA); +} +#else +size_t LCD::write(uint8_t value) +{ + send(value, DATA); + return 1; // assume OK +} +#endif diff --git a/LiquidCrystal/LCD.h b/LiquidCrystal/LCD.h new file mode 100644 index 0000000..88a58ad --- /dev/null +++ b/LiquidCrystal/LCD.h @@ -0,0 +1,536 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LCD.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. This library is a refactored version of the one supplied +// in the Arduino SDK in such a way that it simplifies its extension +// to support other mechanism to communicate to LCDs such as I2C, Serial, SR, +// The original library has been reworked in such a way that this will be +// the base class implementing all generic methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets. +// +// This base class is a pure abstract class and needs to be extended. As reference, +// it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension +// backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// @version API 1.1.0 +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef _LCD_H_ +#define _LCD_H_ + +#if (ARDUINO < 100) +#include +#else +#include +#endif + +#include +#include + + +/*! + @defined + @abstract Enables disables fast waits for write operations for LCD + @discussion If defined, the library will avoid doing un-necessary waits. + this can be done, because the time taken by Arduino's slow digitalWrite + operations. If fast digitalIO operations, comment this line out or undefine + the mode. + */ +#ifdef __AVR__ +#define FAST_MODE +#endif + +/*! + @function + @abstract waits for a given time in microseconds (compilation dependent). + @discussion Waits for a given time defined in microseconds depending on + the FAST_MODE define. If the FAST_MODE is defined the call will return + inmediatelly. + @param uSec[in] time in microseconds. + @result None + */ +inline static void waitUsec ( uint16_t uSec ) +{ +#ifndef FAST_MODE + delayMicroseconds ( uSec ); +#endif // FAST_MODE +} + + +/*! + @defined + @abstract All these definitions shouldn't be used unless you are writing + a driver. + @discussion All these definitions are for driver implementation only and + shouldn't be used by applications. + */ +// LCD Commands +// --------------------------------------------------------------------------- +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +// --------------------------------------------------------------------------- +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off and cursor control +// --------------------------------------------------------------------------- +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +// --------------------------------------------------------------------------- +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +// --------------------------------------------------------------------------- +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + + +// Define COMMAND and DATA LCD Rs (used by send method). +// --------------------------------------------------------------------------- +#define COMMAND 0 +#define DATA 1 +#define FOUR_BITS 2 + + +/*! + @defined + @abstract Defines the duration of the home and clear commands + @discussion This constant defines the time it takes for the home and clear + commands in the LCD - Time in microseconds. + */ +#define HOME_CLEAR_EXEC 2000 + +/*! + @defined + @abstract Backlight off constant declaration + @discussion Used in combination with the setBacklight to swith off the + LCD backlight. @set setBacklight +*/ +#define BACKLIGHT_OFF 0 + +/*! + @defined + @abstract Backlight on constant declaration + @discussion Used in combination with the setBacklight to swith on the + LCD backlight. @set setBacklight + */ +#define BACKLIGHT_ON 255 + + +/*! + @typedef + @abstract Define backlight control polarity + @discussion Backlight control polarity. @see setBacklightPin. + */ +typedef enum { POSITIVE, NEGATIVE } t_backlighPol; + +class LCD : public Print +{ +public: + + /*! + @method + @abstract LiquidCrystal abstract constructor. + @discussion LiquidCrystal class abstract constructor needed to create + the base abstract class. + */ + LCD ( ); + + /*! + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + This method is abstract, a base implementation is available common to all LCD + drivers. Should it not be compatible with some other LCD driver, a derived + implementation should be done on the driver specif class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] character size, default==LCD_5x8DOTS + */ + virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + /*! + @function + @abstract Clears the LCD. + @discussion Clears the LCD screen and positions the cursor in the upper-left + corner. + + This operation is time consuming for the LCD. + + @param none + */ + void clear(); + + /*! + @function + @abstract Sets the cursor to the upper-left corner. + @discussion Positions the cursor in the upper-left of the LCD. + That is, use that location in outputting subsequent text to the display. + To also clear the display, use the clear() function instead. + + This operation is time consuming for the LCD. + + @param none + */ + void home(); + + /*! + @function + @abstract Turns off the LCD display. + @discussion Turns off the LCD display, without losing the text currently + being displayed on it. + + @param none + */ + void noDisplay(); + + /*! + @function + @abstract Turns on the LCD display. + @discussion Turns on the LCD display, after it's been turned off with + noDisplay(). This will restore the text (and cursor location) that was on + the display prior to calling noDisplay(). + + @param none + */ + void display(); + + /*! + @function + @abstract Turns off the blinking of the LCD cursor. + + @param none + */ + void noBlink(); + + /*! + @function + @abstract Display the cursor of the LCD. + @discussion Display the blinking LCD cursor. If used in combination with + the cursor() function, the result will depend on the particular display. + + @param none + */ + void blink(); + + /*! + @function + @abstract Hides the LCD cursor. + + @param none + */ + void noCursor(); + + /*! + @function + @abstract Display the LCD cursor. + @discussion Display the LCD cursor: an underscore (line) at the location + where the next character will be written. + + @param none + */ + void cursor(); + + /*! + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the left. + + @param none + */ + void scrollDisplayLeft(); + + /*! + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the right. + + @param none + */ + void scrollDisplayRight(); + + /*! + @function + @abstract Set the direction for text written to the LCD to left-to-right. + @discussion Set the direction for text written to the LCD to left-to-right. + All subsequent characters written to the display will go from left to right, + but does not affect previously-output text. + + This is the default configuration. + + @param none + */ + void leftToRight(); + + /*! + @function + @abstract Set the direction for text written to the LCD to right-to-left. + @discussion Set the direction for text written to the LCD to right-to-left. + All subsequent characters written to the display will go from right to left, + but does not affect previously-output text. + + left-to-right is the default configuration. + + @param none + */ + void rightToLeft(); + + /*! + @function + @abstract Moves the cursor one space to the left. + @discussion + @param none + */ + void moveCursorLeft(); + + + /*! + @function + @abstract Moves the cursor one space to the right. + + @param none + */ + void moveCursorRight(); + + /*! + @function + @abstract Turns on automatic scrolling of the LCD. + @discussion Turns on automatic scrolling of the LCD. This causes each + character output to the display to push previous characters over by one + space. If the current text direction is left-to-right (the default), + the display scrolls to the left; if the current direction is right-to-left, + the display scrolls to the right. + This has the effect of outputting each new character to the same location on + the LCD. + + @param none + */ + void autoscroll(); + + /*! + @function + @abstract Turns off automatic scrolling of the LCD. + @discussion Turns off automatic scrolling of the LCD, this is the default + configuration of the LCD. + + @param none + */ + void noAutoscroll(); + + /*! + @function + @abstract Creates a custom character for use on the LCD. + @discussion Create a custom character (glyph) for use on the LCD. + Most chipsets only support up to eight characters of 5x8 pixels. Therefore, + this methods has been limited to locations (numbered 0 to 7). + + The appearance of each custom character is specified by an array of eight + bytes, one for each row. The five least significant bits of each byte + determine the pixels in that row. To display a custom character on screen, + write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. + + @param location[in] LCD memory location of the character to create + (0 to 7) + @param charmap[in] the bitmap array representing each row of the character. + */ + void createChar(uint8_t location, uint8_t charmap[]); + + /*! + @function + @abstract Position the LCD cursor. + @discussion Sets the position of the LCD cursor. Set the location at which + subsequent text written to the LCD will be displayed. + + @param col[in] LCD column + @param row[in] LCD row - line. + */ + void setCursor(uint8_t col, uint8_t row); + + /*! + @function + @abstract Switch-on the LCD backlight. + @discussion Switch-on the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + */ + void backlight ( void ); + + /*! + @function + @abstract Switch-off the LCD backlight. + @discussion Switch-off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + */ + void noBacklight ( void ); + + /*! + @function + @abstract Switch on the LCD module. + @discussion Switch on the LCD module, it will switch on the LCD controller + and the backlight. This method has the same effect of calling display and + backlight. @see display, @see backlight + */ + void on ( void ); + + /*! + @function + @abstract Switch off the LCD module. + @discussion Switch off the LCD module, it will switch off the LCD controller + and the backlight. This method has the same effect of calling noDisplay and + noBacklight. @see display, @see backlight + */ + void off ( void ); + + // + // virtual class methods + // -------------------------------------------------------------------------- + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + This method is device dependent and can be programmed on each subclass. An + empty function call is provided that does nothing. + + @param value: pin associated to backlight control. + @param pol: backlight polarity control (POSITIVE, NEGATIVE) + */ + virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { }; + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. The behaviour + of this method is very dependent on the device. Some controllers support + dimming some don't. Please read the actual header file for each individual + device. The setBacklightPin method has to be called before setting the backlight + or the adequate backlight control constructor. + @see setBacklightPin. + + NOTE: The prefered methods to control the backlight are "backlight" and + "noBacklight". + + @param 0..255 - the value is very dependent on the LCD. However, + BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the + backlight on. + */ + virtual void setBacklight ( uint8_t value ) { }; + + /*! + @function + @abstract Writes to the LCD. + @discussion This method writes character to the LCD in the current cursor + position. + + This is the virtual write method, implemented in the Print class, therefore + all Print class methods will end up calling this method. + + @param value[in] Value to write to the LCD. + */ +#if (ARDUINO < 100) + virtual void write(uint8_t value); +#else + virtual size_t write(uint8_t value); +#endif + +#if (ARDUINO < 100) + using Print::write; +#else + using Print::write; +#endif + +protected: + // Internal LCD variables to control the LCD shared between all derived + // classes. + uint8_t _displayfunction; // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or + // LCD_8BITMODE, LCD_1LINE or LCD_2LINE + uint8_t _displaycontrol; // LCD base control command LCD on/off, blink, cursor + // all commands are "ored" to its contents. + uint8_t _displaymode; // Text entry mode to the LCD + uint8_t _numlines; // Number of lines of the LCD, initialized with begin() + uint8_t _cols; // Number of columns in the LCD + t_backlighPol _polarity; // Backlight polarity + +private: + /*! + @function + @abstract Send a command to the LCD. + @discussion This method sends a command to the LCD by setting the Register + select line of the LCD. + + This command shouldn't be used to drive the LCD, only to implement any other + feature that is not available on this library. + + @param value[in] Command value to send to the LCD (COMMAND, DATA or + FOUR_BITS). + */ + void command(uint8_t value); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD. This is a pure abstract + method, therefore, it is implementation dependent of each derived class how + to physically write to the LCD. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. + */ +#if (ARDUINO < 100) + virtual void send(uint8_t value, uint8_t mode) { }; +#else + virtual void send(uint8_t value, uint8_t mode) = 0; +#endif + +}; + +#endif diff --git a/LiquidCrystal/LiquidCrystal.cpp b/LiquidCrystal/LiquidCrystal.cpp new file mode 100644 index 0000000..2c2cae1 --- /dev/null +++ b/LiquidCrystal/LiquidCrystal.cpp @@ -0,0 +1,299 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal.cpp +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using the parallel port of +// the LCD (4 bit and 8 bit). +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LiquidCrystal.h" + +// CONSTANT definitions +// --------------------------------------------------------------------------- +#define LCD_NOBACKLIGHT 0xFF + +// LCD driver configuration (4bit or 8bit driver control) +#define LCD_4BIT 1 +#define LCD_8BIT 0 + +// STATIC helper functions +// --------------------------------------------------------------------------- + + +// CONSTRUCTORS +// --------------------------------------------------------------------------- + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +// Contructors with backlight control +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); + setBacklightPin ( backlightPin, pol ); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); + setBacklightPin ( backlightPin, pol ); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); + setBacklightPin ( backlightPin, pol ); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); + setBacklightPin ( backlightPin, pol ); +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + +/************ low level data pushing commands **********/ +// +// send +void LiquidCrystal::send(uint8_t value, uint8_t mode) +{ + // Only interested in COMMAND or DATA + digitalWrite( _rs_pin, ( mode == DATA ) ); + + // if there is a RW pin indicated, set it low to Write + // --------------------------------------------------- + if (_rw_pin != 255) + { + digitalWrite(_rw_pin, LOW); + } + + if ( mode != FOUR_BITS ) + { + if ( (_displayfunction & LCD_8BITMODE ) ) + { + writeNbits(value, 8); + } + else + { + writeNbits ( value >> 4, 4 ); + writeNbits ( value, 4 ); + } + } + else + { + writeNbits ( value, 4 ); + } + waitUsec ( EXEC_TIME ); // wait for the command to execute by the LCD +} + +// +// setBacklightPin +void LiquidCrystal::setBacklightPin ( uint8_t pin, t_backlighPol pol ) +{ + pinMode ( pin, OUTPUT ); // Difine the backlight pin as output + _backlightPin = pin; + _polarity = pol; + setBacklight(BACKLIGHT_OFF); // Set the backlight low by default +} + +// +// setBackligh +void LiquidCrystal::setBacklight ( uint8_t value ) +{ + // Check if there is a pin assigned to the backlight + // --------------------------------------------------- + if ( _backlightPin != LCD_NOBACKLIGHT ) + { + // Check if the pin is associated to a timer, i.e. PWM + // --------------------------------------------------- + if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER) + { + // Check for control polarity inversion + // --------------------------------------------------- + if ( _polarity == POSITIVE ) + { + analogWrite ( _backlightPin, value ); + } + else + { + analogWrite ( _backlightPin, 255 - value ); + } + } + // Not a PWM pin, set the backlight pin for POSI or NEG + // polarity + // -------------------------------------------------------- + else if (((value > 0) && (_polarity == POSITIVE)) || + ((value == 0) && (_polarity == NEGATIVE))) + { + digitalWrite( _backlightPin, HIGH); + } + else + { + digitalWrite( _backlightPin, LOW); + } + } +} + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + + +// init +void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + uint8_t i; + + // Initialize the IO pins + // ----------------------- + + _rs_pin = rs; + _rw_pin = rw; + _enable_pin = enable; + + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + _data_pins[4] = d4; + _data_pins[5] = d5; + _data_pins[6] = d6; + _data_pins[7] = d7; + + // Initialize the IO port direction to OUTPUT + // ------------------------------------------ + + for ( i = 0; i < 4; i++ ) + { + pinMode ( _data_pins[i], OUTPUT ); + } + + // Initialize the rest of the ports if it is an 8bit controlled LCD + // ---------------------------------------------------------------- + + if ( !fourbitmode ) + { + for ( i = 4; i < 8; i++ ) + { + pinMode ( _data_pins[i], OUTPUT ); + } + } + pinMode(_rs_pin, OUTPUT); + + // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# + if (_rw_pin != 255) + { + pinMode(_rw_pin, OUTPUT); + } + + pinMode(_enable_pin, OUTPUT); + + // Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS + // ------------------------------------------------------------------------- + if (fourbitmode) + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + else + _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; + + // Now we pull both RS and R/W low to begin commands + digitalWrite(_rs_pin, LOW); + digitalWrite(_enable_pin, LOW); + + if (_rw_pin != 255) + { + digitalWrite(_rw_pin, LOW); + } + + // Initialise the backlight pin no nothing + _backlightPin = LCD_NOBACKLIGHT; + _polarity = POSITIVE; +} + +// +// pulseEnable +void LiquidCrystal::pulseEnable(void) +{ + // There is no need for the delays, since the digitalWrite operation + // takes longer. + digitalWrite(_enable_pin, HIGH); + waitUsec(1); // enable pulse must be > 450ns + digitalWrite(_enable_pin, LOW); +} + +// +// write4bits +void LiquidCrystal::writeNbits(uint8_t value, uint8_t numBits) +{ + for (uint8_t i = 0; i < numBits; i++) + { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + pulseEnable(); +} + + diff --git a/LiquidCrystal/LiquidCrystal.h b/LiquidCrystal/LiquidCrystal.h new file mode 100644 index 0000000..e2114dc --- /dev/null +++ b/LiquidCrystal/LiquidCrystal.h @@ -0,0 +1,161 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using the parallel port of +// the LCD (4 bit and 8 bit). +// +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef LiquidCrystal_4bit_h +#define LiquidCrystal_4bit_h + +#include + +#include "LCD.h" +#include "FastIO.h" + + +/*! + @defined + @abstract Command execution time on the LCD. + @discussion This defines how long a command takes to execute by the LCD. + The time is expressed in micro-seconds. + */ +#define EXEC_TIME 37 + +class LiquidCrystal : public LCD +{ +public: + /*! + @method + @abstract 8 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. + */ + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + // Constructors with backlight control + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol); + /*! + @method + @abstract 4 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. + */ + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + + // Constructors with backlight control + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol); + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + + @param pin: pin assigned to the backlight + @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). + */ + void setBacklightPin ( uint8_t pin, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. For dimming control of the + backlight, the configuration pin must be a PWM output pin. Dim control + is achieved by passing a value from 1 to 255 as a parameter. If the + pin configured when calling the setBacklightPin does not support PWM, + then: (0) backlight off, (1..255) backlight on. + + @param value: backlight value. 0: off, 1..255: dim control of the + backlight. For negative logic 255: off, 254..0: dim control. + */ + void setBacklight ( uint8_t value ); + +private: + + /*! + @method + @abstract Initializes the LCD pin allocation and associated HW + @discussion Initializes the LCD pin allocation and configuration. + */ + void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + /*! + @method + @abstract Writes numBits bits from value value to the LCD. + @discussion Writes numBists bits (the least significant) to the LCD control + data lines. + */ + void writeNbits(uint8_t value, uint8_t numBits); + + /*! + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. + */ + void pulseEnable(); + + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; // Data pins. + uint8_t _backlightPin; // Pin associated to control the LCD backlight +}; + +#endif diff --git a/LiquidCrystal/LiquidCrystal_I2C.cpp b/LiquidCrystal/LiquidCrystal_I2C.cpp new file mode 100644 index 0000000..8f1ce77 --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_I2C.cpp @@ -0,0 +1,291 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_I2C.c +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using an I2C IO extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using I2C extension +// backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include +#include "I2CIO.h" +#include "LiquidCrystal_I2C.h" + +// CONSTANT definitions +// --------------------------------------------------------------------------- + +// flags for backlight control +/*! + @defined + @abstract LCD_NOBACKLIGHT + @discussion NO BACKLIGHT MASK + */ +#define LCD_NOBACKLIGHT 0x00 + +/*! + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on + */ +#define LCD_BACKLIGHT 0xFF + + +// Default library configuration parameters used by class constructor with +// only the I2C address field. +// --------------------------------------------------------------------------- +/*! + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Enable + */ +#define EN 6 // Enable bit + +/*! + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Rw pin + */ +#define RW 5 // Read/Write bit + +/*! + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Register select pin + */ +#define RS 4 // Register select bit + +/*! + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module + */ +#define D4 0 +#define D5 1 +#define D6 2 +#define D7 3 + + +// CONSTRUCTORS +// --------------------------------------------------------------------------- +LiquidCrystal_I2C::LiquidCrystal_I2C( uint8_t lcd_Addr ) +{ + config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7); +} + + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, + t_backlighPol pol = POSITIVE) +{ + config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7); + setBacklightPin(backlighPin, pol); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs) +{ + config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs, uint8_t backlighPin, + t_backlighPol pol = POSITIVE) +{ + config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7); + setBacklightPin(backlighPin, pol); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs, uint8_t d4, uint8_t d5, + uint8_t d6, uint8_t d7 ) +{ + config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs, uint8_t d4, uint8_t d5, + uint8_t d6, uint8_t d7, uint8_t backlighPin, + t_backlighPol pol = POSITIVE ) +{ + config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7); + setBacklightPin(backlighPin, pol); +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + +// +// begin +void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) +{ + + init(); // Initialise the I2C expander interface + LCD::begin ( cols, lines, dotsize ); +} + + +// User commands - users can expand this section +//---------------------------------------------------------------------------- +// Turn the (optional) backlight off/on + +// +// setBacklightPin +void LiquidCrystal_I2C::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE ) +{ + _backlightPinMask = ( 1 << value ); + _polarity = pol; + setBacklight(BACKLIGHT_OFF); +} + +// +// setBacklight +void LiquidCrystal_I2C::setBacklight( uint8_t value ) +{ + // Check if backlight is available + // ---------------------------------------------------- + if ( _backlightPinMask != 0x0 ) + { + // Check for polarity to configure mask accordingly + // ---------------------------------------------------------- + if (((_polarity == POSITIVE) && (value > 0)) || + ((_polarity == NEGATIVE ) && ( value == 0 ))) + { + _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT; + } + else + { + _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT; + } + _i2cio.write( _backlightStsMask ); + } +} + + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + +// +// init +int LiquidCrystal_I2C::init() +{ + int status = 0; + + // initialize the backpack IO expander + // and display functions. + // ------------------------------------------------------------------------ + if ( _i2cio.begin ( _Addr ) == 1 ) + { + _i2cio.portMode ( OUTPUT ); // Set the entire IO extender to OUTPUT + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + status = 1; + _i2cio.write(0); // Set the entire port to LOW + } + return ( status ); +} + +// +// config +void LiquidCrystal_I2C::config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ) +{ + _Addr = lcd_Addr; + + _backlightPinMask = 0; + _backlightStsMask = LCD_NOBACKLIGHT; + _polarity = POSITIVE; + + _En = ( 1 << En ); + _Rw = ( 1 << Rw ); + _Rs = ( 1 << Rs ); + + // Initialise pin mapping + _data_pins[0] = ( 1 << d4 ); + _data_pins[1] = ( 1 << d5 ); + _data_pins[2] = ( 1 << d6 ); + _data_pins[3] = ( 1 << d7 ); +} + + + +// low level data pushing commands +//---------------------------------------------------------------------------- + +// +// send - write either command or data +void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) +{ + // No need to use the delay routines since the time taken to write takes + // longer that what is needed both for toggling and enable pin an to execute + // the command. + + if ( mode == FOUR_BITS ) + { + write4bits( (value & 0x0F), COMMAND ); + } + else + { + write4bits( (value >> 4), mode ); + write4bits( (value & 0x0F), mode); + } +} + +// +// write4bits +void LiquidCrystal_I2C::write4bits ( uint8_t value, uint8_t mode ) +{ + uint8_t pinMapValue = 0; + + // Map the value to LCD pin mapping + // -------------------------------- + for ( uint8_t i = 0; i < 4; i++ ) + { + if ( ( value & 0x1 ) == 1 ) + { + pinMapValue |= _data_pins[i]; + } + value = ( value >> 1 ); + } + + // Is it a command or data + // ----------------------- + if ( mode == DATA ) + { + mode = _Rs; + } + + pinMapValue |= mode | _backlightStsMask; + pulseEnable ( pinMapValue ); +} + +// +// pulseEnable +void LiquidCrystal_I2C::pulseEnable (uint8_t data) +{ + _i2cio.write (data | _En); // En HIGH + _i2cio.write (data & ~_En); // En LOW +} \ No newline at end of file diff --git a/LiquidCrystal/LiquidCrystal_I2C.h b/LiquidCrystal/LiquidCrystal_I2C.h new file mode 100644 index 0000000..ea6d87f --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_I2C.h @@ -0,0 +1,204 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_I2C.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using an I2C IO extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using I2C extension +// backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef LiquidCrystal_I2C_h +#define LiquidCrystal_I2C_h +#include +#include + +#include "I2CIO.h" +#include "LCD.h" + + +class LiquidCrystal_I2C : public LCD +{ +public: + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + */ + LiquidCrystal_I2C (uint8_t lcd_Addr); + // Constructor with backlight control + LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol); + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + */ + LiquidCrystal_I2C( uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs); + // Constructor with backlight control + LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t backlighPin, t_backlighPol pol); + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module + */ + LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); + // Constructor with backlight control + LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlighPin, t_backlighPol pol); + /*! + @function + @abstract LCD initialization and associated HW. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class or parent class. + + The begin method can be overloaded if necessary to initialize any HW that + is implemented by a library and can't be done during construction, here + we use the Wire class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. + */ + virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. + */ + void setBacklightPin ( uint8_t value, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) + */ + void setBacklight ( uint8_t value ); + +private: + + /*! + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. + */ + int init(); + + /*! + @function + @abstract Initialises class private variables + @discussion This is the class single point for initialising private variables. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module + */ + void config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); + + /*! + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. + */ + void write4bits(uint8_t value, uint8_t mode); + + /*! + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. + */ + void pulseEnable(uint8_t); + + + uint8_t _Addr; // I2C Address of the IO expander + uint8_t _backlightPinMask; // Backlight IO pin mask + uint8_t _backlightStsMask; // Backlight status mask + I2CIO _i2cio; // I2CIO PCF8574* expansion module driver I2CLCDextraIO + uint8_t _En; // LCD expander word for enable pin + uint8_t _Rw; // LCD expander word for R/W pin + uint8_t _Rs; // LCD expander word for Register Select pin + uint8_t _data_pins[4]; // LCD data lines + +}; + +#endif diff --git a/LiquidCrystal/LiquidCrystal_SR.cpp b/LiquidCrystal/LiquidCrystal_SR.cpp new file mode 100644 index 0000000..67e6954 --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_SR.cpp @@ -0,0 +1,209 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR.h +// Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit +// ShiftRegister (SR from now on). +// +// @brief +// This is a port of the ShiftRegLCD library from raron and ported to the +// LCD library. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library and can +// be used as such. +// +// Modified to work serially with the shiftOut() function, an 8-bit +// unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) +// shift register (IE a very simple SR), and an LCD in 4-bit mode. +// Any such shift register should do (pref. 74LS family IC's for 2-wire). +// I used 74LS164, for the reason that's what I had at hand. +// +// Connection description: +// +// SR output: +// Bit #0 - N/C - not connected, used to hold a zero +// Bit #1 - N/C +// Bit #2 - connects to RS (Register Select) on the LCD +// Bits #3-6 - connects to LCD data inputs D4 - D7. +// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") +// +// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable +// If not using Enable, the Data pin is used for the enable signal by defining +// the same pin for Enable as for Data. Data and Clock outputs/pins goes to +// the shiftregister. +// LCD RW-pin hardwired to LOW (only writing to LCD). +// Busy Flag (BF, data bit D7) is not read. +// +// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ +// +// +// History +// 2012.03.29 bperrybap - Added delays for faster fio shiftout (it got too fast) +// AVR needed delay. cmd/write delays are based on CPU speed so it works on pic32. +// Added code to support indicating two wire mode by using enable=data pin +// (documentation indicated this as working) +// Fixed incorrect use of 5x10 for default font - now matches original LQ library. +// can now eliminate enable pin in constructor for two wire mode. +// 2012.01.16 Florian Fida - faster digitalWrite/shiftOut +// 2011.10.29 fmalpartida - adaption of the library to the LCD class hierarchy. +// 2011.07.02 Fixed a minor flaw in setCursor function. No functional change, +// just a bit more memory efficient. +// Thanks to CapnBry (from google code and github) who noticed it. +// URL to his version of shiftregLCD: +// https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1 +// 2009.07.30 raron - minor corrections to the comments. +// Fixed timing to datasheet safe. Fixed keyword highlights. +// 2009.07.28 Mircho / raron - a new modification to the schematics, and a +// more streamlined interface +// 2009.07.27 Thanks to an excellent suggestion from mircho at the Arduino +// playgrond forum, the number of wires now required is only two! +// 2009.07.25 raron - Fixed comments. I really messed up the comments before +// posting this, so I had to fix it. +// Renamed a function, but no improvements or functional changes. +// 2009.07.23 Incorporated some proper initialization routines +// inspired (lets say copy-paste-tweaked) from LiquidCrystal +// library improvements from LadyAda. +// 2009.05.23 raron - first version, but based mostly (as in almost verbatim) +// on the "official" LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LiquidCrystal_SR.h" + +#include "FastIO.h" + + +// CONSTRUCTORS +// --------------------------------------------------------------------------- +// Assuming 1 line 8 pixel high font +LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, + uint8_t enable ) +{ + init ( srdata, srclock, enable, 1, 0 ); +} + + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + +// +// init +void LiquidCrystal_SR::init(uint8_t srdata, uint8_t srclock, uint8_t enable, + uint8_t lines, uint8_t font) +{ + // Initialise private variables + _two_wire = 0; + + _srDataRegister = fio_pinToOutputRegister(srdata); + _srDataBit = fio_pinToBit(srdata); + _srClockRegister = fio_pinToOutputRegister(srclock); + _srClockBit = fio_pinToBit(srclock); + + if ((enable == TWO_WIRE) || (enable == srdata)) + { + _two_wire = 1; + _srEnableRegister = _srDataRegister; + _srEnableBit = _srDataBit; + } + else + { + _srEnableRegister = fio_pinToOutputRegister(enable); + _srEnableBit = fio_pinToBit(enable); + } + + // Configure control pins as outputs + // ------------------------------------------------------------------------ + + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; +} + +// +// shiftIt +void LiquidCrystal_SR::shiftIt(uint8_t val) +{ + if (_two_wire) + { + // Clear to get Enable LOW + fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit); + } + fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit, val, MSBFIRST); + + // LCD ENABLE PULSE + // + // While this library is written with a shift register without an output + // latch in mind, it can work in 3-wire mode with a shiftregister with a + // latch. The shiftregister latch pin (STR, RCL or similar) is then + // connected to the LCD enable pin. The LCD is (very likely) slower + // to read the Enable pulse, and then reads the new contents of the SR. + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(_srEnableRegister, _srEnableBit); + waitUsec (1); // enable pulse must be >450ns + fio_digitalWrite_SWITCHTO(_srEnableRegister, _srEnableBit, LOW); + } // end critical section +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + + +/************ low level data pushing commands **********/ +// +// send +void LiquidCrystal_SR::send(uint8_t value, uint8_t mode) +{ + // Divide byte in two nibbles include the RS signal + // and format it for shiftregister output wiring to the LCD + // We are only interested in my COMMAND or DATA for myMode + uint8_t myMode = ( mode == DATA ) ? SR_RS_BIT : 0; // RS bit; LOW: command. HIGH: character. + + if ( mode != FOUR_BITS ) + { + shiftIt(myMode | SR_EN_BIT | ((value >> 1) & 0x78)); // upper nibble + } + + shiftIt(myMode | SR_EN_BIT | ((value << 3) & 0x78)); // lower nibble + /* + * Add some delay since this code is so fast it needs some added delay + * even on AVRs because the shiftout is shorter than the LCD command execution time. + */ +#if (F_CPU <= 16000000) + if(_two_wire) + delayMicroseconds ( 10 ); + else + delayMicroseconds ( 17 ); // 3 wire mode is faster so it must delay longer +#else + delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete +#endif + +} + +// +// setBacklightPin +void LiquidCrystal_SR::setBacklightPin ( uint8_t pin, t_backlighPol pol ) +{ } + +// +// setBacklight +void LiquidCrystal_SR::setBacklight ( uint8_t mode ) +{ } + diff --git a/LiquidCrystal/LiquidCrystal_SR.h b/LiquidCrystal/LiquidCrystal_SR.h new file mode 100644 index 0000000..0d22022 --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_SR.h @@ -0,0 +1,176 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR.h +// Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit +// ShiftRegister (SR from now on). +// +// @brief +// This is a port of the ShiftRegLCD library from raron and ported to the +// LCD library. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library and can +// be used as such. +// +// Modified to work serially with the shiftOut() function, an 8-bit +// unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) +// shift register (IE a very simple SR), and an LCD in 4-bit mode. +// Any such shift register should do (pref. 74LS family IC's for 2-wire). +// I used 74LS164, for the reason that's what I had at hand. +// +// Connection description: +// +// SR output: +// Bit #0 - N/C - not connected, used to hold a zero +// Bit #1 - N/C +// Bit #2 - connects to RS (Register Select) on the LCD +// Bits #3-6 - connects to LCD data inputs D4 - D7. +// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") +// +// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable +// If not using Enable, the Data pin will be used for the enable signal. +// 2 wire mode can be indicated by: +// - ommitting the enable pin in constructor +// - defining the same pin for Enable as for Data in constructor +// - by using the token TWO_WIRE for the enable pin. +// +// Data and Clock outputs/pins goes to the shiftregister. +// LCD RW-pin hardwired to LOW (only writing to LCD). +// Busy Flag (BF, data bit D7) is not read. +// +// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ +// +// +// History +// 2012.03.29 bperrybap - can now eliminate enable pin in constructor for two wire mode. +// 2011.10.29 fmalpartida - adaption of the library to the LCD class hierarchy. +// 2011.07.02 Fixed a minor flaw in setCursor function. No functional change, +// just a bit more memory efficient. +// Thanks to CapnBry (from google code and github) who noticed it. +// URL to his version of shiftregLCD: +// https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1 +// 2009.07.30 raron - minor corrections to the comments. +// Fixed timing to datasheet safe. Fixed keyword highlights. +// 2009.07.28 Mircho / raron - a new modification to the schematics, and a +// more streamlined interface +// 2009.07.27 Thanks to an excellent suggestion from mircho at the Arduiono +// playgrond forum, the number of wires now required is only two! +// 2009.07.25 raron - Fixed comments. I really messed up the comments before +// posting this, so I had to fix it. +// Renamed a function, but no improvements or functional changes. +// 2009.07.23 Incorporated some proper initialization routines +// inspired (lets say copy-paste-tweaked) from LiquidCrystal +// library improvements from LadyAda. +// 2009.05.23 raron - first version, but based mostly (as in almost verbatim) +// on the "official" LiquidCrystal library. +// +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef _LIQUIDCRYSTAL_SR_ +#define _LIQUIDCRYSTAL_SR_ + +#include +#include "LCD.h" +#include "FastIO.h" + + +// two-wire indicator constant +// --------------------------------------------------------------------------- +#define TWO_WIRE 204 +#define SR_RS_BIT 0x04 +#define SR_EN_BIT 0x80 + +class LiquidCrystal_SR : public LCD +{ +public: + /*! + @method + @abstract LCD SHIFT REGISTER constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] pin for shiftregister data line. + @param srclock[in] pin for shiftregister clock line. + @param enable[in] optional direct enable pin for the LCD + */ + LiquidCrystal_SR ( uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE ); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + @warning Currently not supported + + @param mode: backlight mode (HIGH|LOW) + @param pol: backlight polarity + */ + void setBacklightPin ( uint8_t pin, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode: backlight mode (HIGH|LOW) + */ + void setBacklight ( uint8_t mode ); + +private: + + /*! + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. + */ + void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, + uint8_t font ); + + /*! + * @method + * @abstract takes care of shifting and the enable pulse + */ + void shiftIt (uint8_t val); + + uint8_t _enable_pin; // Enable Pin + uint8_t _two_wire; // two wire mode + + fio_register _srDataRegister; // Serial Data pin + fio_bit _srDataBit; + fio_register _srClockRegister; // Clock Pin + fio_bit _srClockBit; + fio_register _srEnableRegister; // Enable Pin + fio_bit _srEnableBit; + +}; + +#endif + diff --git a/LiquidCrystal/LiquidCrystal_SR2W.cpp b/LiquidCrystal/LiquidCrystal_SR2W.cpp new file mode 100644 index 0000000..df4559a --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_SR2W.cpp @@ -0,0 +1,135 @@ +// --------------------------------------------------------------------------- +// Created/Adapted by Bill Perry 2012-03-16 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR2W.cpp +// Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit +// ShiftRegister (SR2W from now on). +// +// @brief +// This is a port of the ShiftRegLCD library from raron and ported to the +// LCD library. +// +// +// See the corresponding SR2W header file for full details. +// +// History +// 2012.03.29 bperrybap - Fixed incorrect use of 5x10 for default font +// (now matches original LQ library) +// Fixed typo in SR2W mask define names +// changed default backlight state to on +// 2012.03.16 bperrybap - created/modified from SR sources to create SR2W +// @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com +// --------------------------------------------------------------------------- + +#include "LiquidCrystal_SR2W.h" + +// CONSTRUCTORS +// --------------------------------------------------------------------------- +// Assuming 1 line 8 pixel high font +LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol) +{ + init ( srdata, srclock, blpol, 1, 0 ); +} + + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + +// +// init +void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font) +{ + _srDataRegister = fio_pinToOutputRegister(srdata); + _srDataMask = fio_pinToBit(srdata); + _srClockRegister = fio_pinToOutputRegister(srclock); + _srClockMask = fio_pinToBit(srclock); + + _blPolarity = blpol; + + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + + backlight(); // set default backlight state to on +} + +// +// loadSR +void LiquidCrystal_SR2W::loadSR(uint8_t val) +{ + // Clear to keep Enable LOW while clocking in new bits + fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask); + + + // clock out SR data byte + fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask, val, MSBFIRST); + + + // strobe LCD enable which can now be toggled by the data line + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(_srDataRegister, _srDataMask); + waitUsec (1); // enable pulse must be >450ns + fio_digitalWrite_SWITCHTO(_srDataRegister, _srDataMask, LOW); + } // end critical section +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + + +/************ low level data pushing commands **********/ +// +// send +void LiquidCrystal_SR2W::send(uint8_t value, uint8_t mode) +{ + uint8_t myMode = ( mode == DATA ) ? SR2W_RS_MASK : 0; + + myMode = myMode | SR2W_EN_MASK | _blMask; + + if ( mode != FOUR_BITS ) + { + loadSR(myMode | ((value >> 1) & SR2W_DATA_MASK)); // upper nibble + } + + loadSR(myMode | ((value << 3) & SR2W_DATA_MASK)); // lower nibble + + /* + * Don't call waitUsec() + * do our own delay optmization since this code is so fast it needs some added delay + * even on slower AVRs. + */ +#if (F_CPU <= 16000000) + delayMicroseconds ( 10 ); // commands & data writes need > 37us to complete +#else + delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete +#endif +} + +// +// setBacklight +void LiquidCrystal_SR2W::setBacklight ( uint8_t value ) +{ + // Check for polarity to configure mask accordingly + // ---------------------------------------------------------- + if ( ((_blPolarity == POSITIVE) && (value > 0)) || + ((_blPolarity == NEGATIVE ) && ( value == 0 )) ) + { + _blMask = SR2W_BL_MASK; + } + else + { + _blMask = 0; + } + + // send dummy data of blMask to set BL pin + // Note: loadSR() will strobe the data line trying to pulse EN + // but E will not strobe because the EN output bit is not set. + loadSR(_blMask); +} diff --git a/LiquidCrystal/LiquidCrystal_SR2W.h b/LiquidCrystal/LiquidCrystal_SR2W.h new file mode 100644 index 0000000..2bccb87 --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_SR2W.h @@ -0,0 +1,202 @@ +// --------------------------------------------------------------------------- +// Created/Adapted by Bill Perry 2012-03-16 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// @file LiquidCrystal_SR2W.h +// Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit +// ShiftRegister (SR2W from now on). +// +// @brief +// This is the 2 wire shift register interface class for the LCD library +// +// The functionality provided by this class and its base class is a superset of +// the original functionality of the Arduino LiquidCrystal library and can +// be used as such. +// See the LCD class for a full description of the API functions available. +// +// It works with a 8-bit unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) +// shift register (IE a very simple SR), and an hd44780 LCD in 4-bit mode. +// Any such shift register should do (pref. 74LS family IC's for 2-wire). +// 74LS164 and 74HC595 have been exstensively tested. +// +// +// 2 Pins required from the Arduino: +// - Data/Enable +// - Clock +// The Data pin is also used to control the enable signal +// LCD RW-pin hardwired to LOW (only writing to LCD). +// Busy Flag (BF, data bit D7) is not read. +// +// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ +// +// Shift register bits +// Bit #0 - (cannot be used on 74HC595) +// Bit #1 - optional backlight control +// Bit #2 - connects to RS (Register Select) on the LCD +// Bit #3 - connects to LCD data inputs D4 +// Bit #4 - connects to LCD data inputs D5 +// Bit #5 - connects to LCD data inputs D6 +// Bit #6 - connects to LCD data inputs D7 +// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") +// +// Wiring for a 74LS164 +// --------------------- +// 1k/4.7k +// +--------[ Resistor ]--------+---(LCD Enable) +// | | +// | 74LS164 (VCC) | +// | +----u----+ | _V_ diode +// (data pin)---+---+--1-|A VCC|-14-+ | +// | | | | +// +--2-|B Q7|-13------+ +// 3-|Q0 Q6|-12--(LCD D7) +// (BL Circuit)--------4-|Q1 Q5|-11--(LCD D6) +// (LCD RS)------------5-|Q2 Q4|-10--(LCD D5) +// (LCD D4)------------6-|Q3 /MR|--9--(VCC) +// +-7-|GND CP|--8--(clock pin) +// | +---------+ +// | 0.1uf +// (gnd)-----||----(vcc) +// +// Wiring for a 74HC595 +// -------------------- +// NOTE: the 74HC595 is a latching shift register. In order to get it to operate +// in a "non latching" mode, RCLK and SCLK are tied together. The side effect of this +// is that the latched output is one clock behind behind the internal shift register bits. +// To compensate for this the wiring is offset by one bit position lower. +// For example, while the backlight is hooked to Q0 it is still using bit 1 of +// of the shift register because the outputs are 1 clock behind the real internal shift +// register. +// +// 74HC595 (VCC) +// +----u----+ | +-----------------------(BL circuit) +// (LCD RS)------------1-|Q1 VCC|-16-+ | +--------------------(data pin) +// (LCD D4)------------2-|Q2 Q0|-15----+ | 1k/4.7k +// (LCD D5)------------3-|Q3 SER|-14-------+---[ Resistor ]--+--(LCD Enable) +// (LCD D6)------------4-|Q4 /OE|-13--(gnd) | +// (LCD D7)------------5-|Q5 RCLK|-12-------+ | +// | | | | +// +------6-|Q6 SCLK|-11-------+--(clock pin) | +// | 7-|Q7 /MR|-10--(VCC) | +// | +-8-|GND Q6'|--9 | +// | | +---------+ diode _V_ +// | | 0.1uf | +// | (gnd)-----||----(vcc) | +// +-----------------------------------------------+ +// +// +// Backlight Control circuit +// ------------------------- +// Because the shift resiter is not latching the outputs, the backlight circuitry +// will "see" the output bits as they are shifted into the shift register which +// can cause the backlight to flicker rather than remain constantly on/off. +// The circuit below slows down the transitions to the transistor to remove +// the visible flicker. When the BL input is HIGH the LCD backlight will turn on. +// +// (value depends on LCD, 100ohm is usually safe) +// (LCD BL anode)---[ resistor ]---(vcc) +// +// (LCD BL cathode)-------------------------------+ +// | +// D +// | +// (BL input)----[ 4.7k Resistor ]----+-------G-|-< (2N7000 FET) +// | | +// (0.1uf) = S +// | | +// (gnd) (gnd) +// +// +// +// +// History +// 2012.03.16 bperrybap - creation/adaption from SR header to create SR2W header. +// Fixed typo in SR2W mask define names +// @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com +// -------------------------------------------------------------------------------- +#ifndef _LIQUIDCRYSTAL_SR2W_ +#define _LIQUIDCRYSTAL_SR2W_ + +#include +#include "LCD.h" +#include "FastIO.h" + + +// two-wire SR output bit constants +// --------------------------------------------------------------------------- + +#define SR2W_BL_MASK 0x02 +#define SR2W_RS_MASK 0x04 +#define SR2W_DATA_MASK 0x78 // data bits are hard coded to be SR bits 6,5,4,3 +#define SR2W_EN_MASK 0x80 // cannot ever be changed + +class LiquidCrystal_SR2W : public LCD +{ +public: + /*! + @method + @abstract LCD 2 wire SHIFT REGISTER constructor. + @discussion Defines the pin assignments that connect to the shift register. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] Arduino pin for shift register data line. + @param srclock[in] Arduino pin for shift register clock line. + @param blpol[in] optional backlight polarity (default = POSITIVE) + */ + LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol = POSITIVE); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd + the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode[in] backlight mode (0 off, non-zero on) + */ + void setBacklight ( uint8_t mode ); + +private: + + /*! + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. + */ + void init ( uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font ); + + /*! + * @method + * @abstract takes care of shifting and the enable pulse + */ + void loadSR (uint8_t val); + + fio_register _srDataRegister; // Serial Data pin + fio_bit _srDataMask; + fio_register _srClockRegister; // Clock Pin + fio_bit _srClockMask; + + uint8_t _blPolarity; + uint8_t _blMask; +}; +#endif diff --git a/LiquidCrystal/LiquidCrystal_SR3W.cpp b/LiquidCrystal/LiquidCrystal_SR3W.cpp new file mode 100644 index 0000000..6144c06 --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_SR3W.cpp @@ -0,0 +1,283 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 7.3.2012. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SRG.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using a generic SHIFT REGISTER extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using a 3 wire latching +// shift register. While it has been tested with a 74HC595N shift register +// it should also work with other latching shift registers such as the MC14094 +// and the HEF4094 +// +// This particular driver has been created as generic as possible to enable +// users to configure and connect their LCDs using just 3 digital IOs from the +// AVR or Arduino, and connect the LCD to the outputs of the shiftregister +// in any configuration. The library is configured by passing the IO pins +// that control the strobe, data and clock of the shift register and a map +// of how the shiftregister is connected to the LCD. +// +// +// +--------------------------------------------+ +// | MCU | +// | IO1 IO2 IO3 | +// +----+-------------+-------------+-----------+ +// | | | +// | | | +// +----+-------------+-------------+-----------+ +// | Strobe Data Clock | +// | 8-bit shift/latch register | 74HC595N +// | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 | +// +----+----+----+----+----+----+----+----+----+ +// | | | | | | | +// |11 |12 |13 |14 |6 |5 |4 (LCD pins) +// +----+----+----+----+----+----+----+----+----+ +// | DB4 DB5 DB6 DB7 E Rw RS | +// | LCD Module | +// +// NOTE: Rw is not used by the driver so it can be connected to GND. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// History +// 2012.03.29 bperrybap - fixed constructors not properly using Rs +// Fixed incorrect use of 5x10 for default font +// - now matches original LQ library. +// moved delay to send() so it is per cmd/write vs shiftout() +// NOTE: delay is on hairy edge of working when FAST_MODE is on. +// because of waitUsec(). +// There is margin at 16Mhz AVR but might fail on 20Mhz AVRs. +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +// flags for backlight control +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LiquidCrystal_SR3W.h" + +#include "FastIO.h" + +/*! + @defined + @abstract LCD_NOBACKLIGHT + @discussion No BACKLIGHT MASK + */ +#define LCD_NOBACKLIGHT 0x00 + +/*! + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on + */ +#define LCD_BACKLIGHT 0xFF + + +// Default library configuration parameters used by class constructor with +// only the I2C address field. +// --------------------------------------------------------------------------- +/*! + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Enable + */ +#define EN 4 // Enable bit + +/*! + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Rw pin + */ +#define RW 5 // Read/Write bit + +/*! + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Register select pin + */ +#define RS 6 // Register select bit + +/*! + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module + */ +#define D4 0 +#define D5 1 +#define D6 2 +#define D7 3 + + + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe) +{ + init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 ); +} + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t backlighPin, t_backlighPol pol) +{ + init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 ); + setBacklightPin(backlighPin, pol); +} + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ) +{ + init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 ); +} + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlighPin, t_backlighPol pol) +{ + init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 ); + setBacklightPin(backlighPin, pol); +} + + +void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode) +{ + + if ( mode != FOUR_BITS ) + { + write4bits( (value >> 4), mode ); // upper nibble + } + write4bits( (value & 0x0F), mode); // lower nibble + + +#if (F_CPU <= 16000000) + // No need to use the delay routines on AVR since the time taken to write + // on AVR with SR pin mapping even with fio is longer than LCD command execution. + waitUsec(37); //goes away on AVRs +#else + delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete +#endif + +} + + +void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE ) +{ + _backlightPinMask = ( 1 << value ); + _backlightStsMask = LCD_NOBACKLIGHT; + _polarity = pol; + setBacklight (BACKLIGHT_OFF); // Set backlight to off as initial setup +} + +void LiquidCrystal_SR3W::setBacklight ( uint8_t value ) +{ + // Check if backlight is available + // ---------------------------------------------------- + if ( _backlightPinMask != 0x0 ) + { + // Check for polarity to configure mask accordingly + // ---------------------------------------------------------- + if (((_polarity == POSITIVE) && (value > 0)) || + ((_polarity == NEGATIVE ) && ( value == 0 ))) + { + _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT; + } + else + { + _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT; + } + loadSR( _backlightStsMask ); + } +} + + +// PRIVATE METHODS +// ----------------------------------------------------------------------------- + +int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t Rs, uint8_t Rw, uint8_t En, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + _data = fio_pinToBit(data); + _clk = fio_pinToBit(clk); + _strobe = fio_pinToBit(strobe); + _data_reg = fio_pinToOutputRegister(data); + _clk_reg = fio_pinToOutputRegister(clk); + _strobe_reg = fio_pinToOutputRegister(strobe); + + // LCD pin mapping + _backlightPinMask = 0; + _backlightStsMask = LCD_NOBACKLIGHT; + _polarity = POSITIVE; + + _En = ( 1 << En ); + _Rw = ( 1 << Rw ); + _Rs = ( 1 << Rs ); + + // Initialise pin mapping + _data_pins[0] = ( 1 << d4 ); + _data_pins[1] = ( 1 << d5 ); + _data_pins[2] = ( 1 << d6 ); + _data_pins[3] = ( 1 << d7 ); + + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + + return (1); +} + +void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode) +{ + uint8_t pinMapValue = 0; + + // Map the value to LCD pin mapping + // -------------------------------- + for ( uint8_t i = 0; i < 4; i++ ) + { + if ( ( value & 0x1 ) == 1 ) + { + pinMapValue |= _data_pins[i]; + } + value = ( value >> 1 ); + } + + // Is it a command or data + // ----------------------- + mode = ( mode == DATA ) ? _Rs : 0; + + pinMapValue |= mode | _backlightStsMask; + loadSR ( pinMapValue | _En ); // Send with enable high + loadSR ( pinMapValue); // Send with enable low +} + + +void LiquidCrystal_SR3W::loadSR(uint8_t value) +{ + // Load the shift register with information + fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST); + + // Strobe the data into the latch + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(_strobe_reg, _strobe); + fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW); + } +} diff --git a/LiquidCrystal/LiquidCrystal_SR3W.h b/LiquidCrystal/LiquidCrystal_SR3W.h new file mode 100644 index 0000000..0f0b32f --- /dev/null +++ b/LiquidCrystal/LiquidCrystal_SR3W.h @@ -0,0 +1,202 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 7.3.2012. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR3W.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using a generic SHIFT REGISTER extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using a 3 wire latching +// shift register. While it has been tested with a 74HC595N shift register +// it should also work with other latching shift registers such as the MC14094 +// and the HEF4094 +// +// This particular driver has been created as generic as possible to enable +// users to configure and connect their LCDs using just 3 digital IOs from the +// AVR or Arduino, and connect the LCD to the outputs of the shiftregister +// in any configuration. The library is configured by passing the IO pins +// that control the strobe, data and clock of the shift register and a map +// of how the shiftregister is connected to the LCD. +// +// +// +--------------------------------------------+ +// | MCU | +// | IO1 IO2 IO3 | +// +----+-------------+-------------+-----------+ +// | | | +// | | | +// +----+-------------+-------------+-----------+ +// | Strobe Data Clock | +// | 8-bit shift/latch register | 74HC595N +// | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 | +// +----+----+----+----+----+----+----+----+----+ +// | | | | | | | +// |11 |12 |13 |14 |6 |5 |4 (LCD pins) +// +----+----+----+----+----+----+----+----+----+ +// | DB4 DB5 DB6 DB7 E Rw RS | +// | LCD Module | +// +// NOTE: Rw is not used by the driver so it can be connected to GND. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef _LIQUIDCRYSTAL_SR3W_H_ +#define _LIQUIDCRYSTAL_SR3W_H_ + +#include +#include "LCD.h" +#include "FastIO.h" + + +class LiquidCrystal_SR3W : public LCD +{ +public: + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the IO driving the + shift register. The constructor does not initialize the LCD. + Default configuration: + Shift register LCD + QA - 0 DB4 + QB - 1 DB5 + QC - 2 DB6 + QD - 3 DB7 + QE - 4 E + QF - 5 + QG - 6 Rs + GND Rw + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to the shiftregister data pin. + @param clk[in] digital IO connected to the shiftregister clock pin. + */ + LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe); + // Constructor with backlight control + LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t backlighPin, t_backlighPol pol); + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the control lines of + the LCD and the shiftregister. The constructor does not initialize the LCD. + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to shiftregister data pin. + @param clk[in] digital IO connected to shiftregister clock pin. + @param En[in] LCD En (Enable) pin connected to SR output pin. + @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. + @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. + @param d4[in] LCD data 4 pin map to the SR output pin. + @param d5[in] LCD data 5 pin map to the SR output pin. + @param d6[in] LCD data 6 pin map to the SR output pin. + @param d7[in] LCD data 7 pin map to the SR output pin. + */ + LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); + // Constructor with backlight control + LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlighPin, t_backlighPol pol); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. + */ + void setBacklightPin ( uint8_t value, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) + */ + void setBacklight ( uint8_t value ); + +private: + + /*! + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. + */ + int init(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t Rs, uint8_t Rw, uint8_t En, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + /*! + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. + */ + void write4bits(uint8_t value, uint8_t mode); + + /*! + @function + @abstract load into the shift register a byte + @discussion loads into the shift register a byte + @param value[in]: value to be loaded into the shiftregister. + */ + void loadSR(uint8_t value); + + + fio_bit _strobe; // shift register strobe pin + fio_register _strobe_reg; // SR strobe pin MCU register + fio_bit _data; // shift register data pin + fio_register _data_reg; // SR data pin MCU register + fio_bit _clk; // shift register clock pin + fio_register _clk_reg; // SR clock pin MCU register + uint8_t _En; // LCD expander word for enable pin + uint8_t _Rw; // LCD expander word for R/W pin + uint8_t _Rs; // LCD expander word for Register Select pin + uint8_t _data_pins[4]; // LCD data lines + uint8_t _backlightPinMask; // Backlight IO pin mask + uint8_t _backlightStsMask; // Backlight status mask + +}; + +#endif + diff --git a/LiquidCrystal/docs/Doxyfile b/LiquidCrystal/docs/Doxyfile new file mode 100644 index 0000000..b097cd8 --- /dev/null +++ b/LiquidCrystal/docs/Doxyfile @@ -0,0 +1,1749 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "LCD Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.2.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library." + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = /Users/fmalpartida/Documents/electroFunLTD/templates/anchillary/graficas/logo/logoGoogle.jpg + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = YES + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = YES + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/LiquidCrystal/docs/def/doxygen.def b/LiquidCrystal/docs/def/doxygen.def new file mode 100644 index 0000000..5af747c --- /dev/null +++ b/LiquidCrystal/docs/def/doxygen.def @@ -0,0 +1,7432 @@ +AutoGen Definitions dummy; +class = { + cp-id = 'class_i2_c_i_o'; + cp-name = 'I2CIO'; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'i2cAddr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '62'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the device. + @discussion This method initializes the device allocating an I2C address. + This method is the first method that should be call prior to calling any + other method form this class. On initialization all pins are configured + as INPUT on the device. + + @param i2cAddr: I2C Address where the device is located. + @result 1 if the device was initialized correctly, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalRead'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '108'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Read a pin from the device. + @discussion Reads a particular pin from the device. To read a particular + pin it has to be configured as INPUT. During initialization all pins are + configured as INPUTs by default. Please refer to pinMode or portMode. + + @param pin[in] Pin from the port to read its status. Range (0..7) + @result Returns the pin status (HIGH, LOW) if the pin is configured + as an output, reading its value will always return LOW regardless of its + real state. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalWrite'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'level'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '136'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes a digital level to a particular pin. + @discussion Write a level to the indicated pin of the device. For this + method to have effect, the pin has to be configured as OUTPUT using the + pinMode or portMode methods. + + @param pin[in] device pin to change level. Range (0..7). + @para level[in] logic level to set the pin at (HIGH, LOW). + @result 1 on success, 0 otherwise. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'I2CIO'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '49'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Constructor method + @discussion Class constructor constructor. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pinMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '73'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets the mode of a particular pin. + @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite + has no effect on pins which are not declared as output. + + @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 + @param dir[in] Pin direction (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'portMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '83'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets all the pins of the device in a particular direction. + @discussion This method sets all the pins of the device in a particular + direction. This method is useful to set all the pins of the device to be + either inputs or outputs. + @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'read'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '94'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Reads all the pins of the device that are configured as INPUT. + @discussion Reads from the device the status of the pins that are configured + as INPUT. During initialization all pins are configured as INPUTs by default. + Please refer to pinMode or portMode. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '123'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Write a value to the device. + @discussion Writes to a set of pins in the device. The value is the binary + representation of all the pins in device. The value written is masked with + the configuration of the direction of the pins; to change the state of + a particular pin with this method, such pin has to be configured as OUTPUT + using the portMode or pinMode methods. If no pins have been configured as + OUTPUTs this method will have no effect. + + @param value[in] value to be written to the device. + @result 1 on success, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_dirMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '142'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cAddr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '143'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +bool +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_initialised'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '144'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_shadow'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '141'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + cp-fileline = '42'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_l_c_d'; + cp-name = 'LCD'; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___i2_c'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___s_r'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___s_r2_w'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___s_r3_w'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'autoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '354'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on automatic scrolling of the LCD. + @discussion Turns on automatic scrolling of the LCD. This causes each + character output to the display to push previous characters over by one + space. If the current text direction is left-to-right (the default), + the display scrolls to the left; if the current direction is right-to-left, + the display scrolls to the right. + This has the effect of outputting each new character to the same location on + the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aba8867fe2210cbfa8db869208709be10'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'backlight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '402'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on the LCD backlight. + @discussion Switch-on the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3f587d1cbb2d59765ef60a5216b56fea'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + This method is abstract, a base implementation is available common to all LCD + drivers. Should it not be compatible with some other LCD driver, a derived + implementation should be done on the driver specif class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] character size, default==LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'blink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '260'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the cursor of the LCD. + @discussion Display the blinking LCD cursor. If used in combination with + the cursor() function, the result will depend on the particular display. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'clear'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '208'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Clears the LCD. + @discussion Clears the LCD screen and positions the cursor in the upper-left + corner. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'createChar'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'location'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charmap'; + sec-mem-param-array = '[]'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '382'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Creates a custom character for use on the LCD. + @discussion Create a custom character (glyph) for use on the LCD. + Most chipsets only support up to eight characters of 5x8 pixels. Therefore, + this methods has been limited to locations (numbered 0 to 7). + + The appearance of each custom character is specified by an array of eight + bytes, one for each row. The five least significant bits of each byte + determine the pixels in that row. To display a custom character on screen, + write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. + + @param location[in] LCD memory location of the character to create + (0 to 7) + @param charmap[in] the bitmap array representing each row of the character. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'cursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '278'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the LCD cursor. + @discussion Display the LCD cursor: an underscore (line) at the location + where the next character will be written. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'display'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '242'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on the LCD display. + @discussion Turns on the LCD display, after it's been turned off with + noDisplay(). This will restore the text (and cursor location) that was on + the display prior to calling noDisplay(). + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'home'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '221'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the cursor to the upper-left corner. + @discussion Positions the cursor in the upper-left of the LCD. + That is, use that location in outputting subsequent text to the display. + To also clear the display, use the clear() function instead. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LCD'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '179'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LiquidCrystal abstract constructor. + @discussion LiquidCrystal class abstract constructor needed to create + the base abstract class. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'leftToRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '309'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to left-to-right. + @discussion Set the direction for text written to the LCD to left-to-right. + All subsequent characters written to the display will go from left to right, + but does not affect previously-output text. + + This is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aad2abc99d1aca5403873579d9d72c2d4'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'moveCursorLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '330'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Moves the cursor one space to the left. + @discussion + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a09eec0c712e54b066f5894635c1fe75c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'moveCursorRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '339'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Moves the cursor one space to the right. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noAutoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '364'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off automatic scrolling of the LCD. + @discussion Turns off automatic scrolling of the LCD, this is the default + configuration of the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a2a331b4e142734411b2f1cfaffe7a488'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '411'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-off the LCD backlight. + @discussion Switch-off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBlink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '250'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the blinking of the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noCursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '268'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Hides the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noDisplay'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '231'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the LCD display. + @discussion Turns off the LCD display, without losing the text currently + being displayed on it. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a191639be183be1476c9bfe6d455d23b2'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'off'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '429'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch off the LCD module. + @discussion Switch off the LCD module, it will switch off the LCD controller + and the backlight. This method has the same effect of calling noDisplay and + noBacklight. @see display, @see backlight +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a718da3a638deb59bd1c7a5222a52d98a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'on'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '420'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch on the LCD module. + @discussion Switch on the LCD module, it will switch on the LCD controller + and the backlight. This method has the same effect of calling display and + backlight. @see display, @see backlight +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'rightToLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '322'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to right-to-left. + @discussion Set the direction for text written to the LCD to right-to-left. + All subsequent characters written to the display will go from right to left, + but does not affect previously-output text. + + left-to-right is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '287'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the left. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '296'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the right. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3305570d7b37eb93f2cf840263c15828'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '463'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. The behaviour + of this method is very dependent on the device. Some controllers support + dimming some don't. Please read the actual header file for each individual + device. The setBacklightPin method has to be called before setting the backlight + or the adequate backlight control constructor. + @see setBacklightPin. + + NOTE: The prefered methods to control the backlight are "backlight" and + "noBacklight". + + @param 0..255 - the value is very dependent on the LCD. However, + BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the + backlight on. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a53f4ee9b39d9ab3d7ae4d9f8dedca3bc'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '444'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + This method is device dependent and can be programmed on each subclass. An + empty function call is provided that does nothing. + + @param value: pin associated to backlight control. + @param pol: backlight polarity control (POSITIVE, NEGATIVE) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setCursor'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'col'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'row'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '393'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Position the LCD cursor. + @discussion Sets the position of the LCD cursor. Set the location at which + subsequent text written to the LCD will be displayed. + + @param col[in] LCD column + @param row[in] LCD row - line. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a2d89cc2e62f72afb5f15a7fd812900e3'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '477'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Writes to the LCD. + @discussion This method writes character to the LCD in the current cursor + position. + + This is the virtual write method, implemented in the Print class, therefore + all Print class methods will end up calling this method. + + @param value[in] Value to write to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'protected-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a88b16ea0e5c7d1cabc5007d48bcbd2b0'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_cols'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '497'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaycontrol'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '493'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displayfunction'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '491'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaymode'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '495'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_numlines'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '496'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a990338759d2abe10b0fb1743b7789566'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_polarity'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '498'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'command'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '513'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a command to the LCD. + @discussion This method sends a command to the LCD by setting the Register + select line of the LCD. + + This command shouldn't be used to drive the LCD, only to implement any other + feature that is not available on this library. + + @param value[in] Command value to send to the LCD (COMMAND, DATA or + FOUR_BITS). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a8a5b6f6f448a6ca6eeb3466c370d47ab'; + sec-mem-virt = virtual; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '529'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD. This is a pure abstract + method, therefore, it is implementation dependent of each derived class how + to physically write to the LCD. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + cp-fileline = '170'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 5; + node-label = 'LiquidCrystal_SR'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 2; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 3; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 4; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 6; + node-label = 'LiquidCrystal_SR2W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r2_w'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 7; + node-label = 'LiquidCrystal_SR3W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r3_w'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal'; + cp-name = 'LiquidCrystal'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '55'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 8 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '58'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1ae0c3c8f7661634b1400f00a1c9c02c26'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '68'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a52a4de3d866e347208a32dfc9d797729'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '86'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '76'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 4 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a8b90122c67a6d14b967c8a11ba490670'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '83'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '78'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1aff2330186495fde93370d46c0ca2cbf0'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '64'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '99'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1aa2b898366e1c656ac313b9007c98cebd'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '125'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. For dimming control of the + backlight, the configuration pin must be a PWM output pin. Dim control + is achieved by passing a value from 1 to 255 as a parameter. If the + pin configured when calling the setBacklightPin does not support PWM, + then: (0) backlight off, (1..255) backlight on. + + @param value: backlight value. 0: off, 1..255: dim control of the + backlight. For negative logic 255: off, 254..0: dim control. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a63740dc1198d8169a39d9c6daff0efc9'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '109'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + + @param pin: pin assigned to the backlight + @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'fourbitmode'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '136'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation and associated HW + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '152'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a641301bc315a4e167c5aee7ea99993fd'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'writeNbits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'numBits'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '144'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes numBits bits from value value to the LCD. + @discussion Writes numBists bits (the least significant) to the LCD control + data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a23a1807a1fe4210ac7cfca9b779513ea'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightPin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '158'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '157'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_enable_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '156'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rs_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '154'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rw_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '155'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + cp-fileline = '45'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 10; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 9; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '10'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 12; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 11; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '12'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___i2_c'; + cp-name = 'LiquidCrystal_I2C'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '110'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization and associated HW. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class or parent class. + + The begin method can be overloaded if necessary to initialize any HW that + is implemented by a library and can't be done during construction, here + we use the Wire class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a9fc9bc519ebbf7503dadc11622e02ed6'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '53'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1add1f2da7de4ec9b9cd5c9b5fab712464'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '70'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a7d9b54d3a91fa0e0e50db27cda6b4654'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '89'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a517f8847ebf09f0eacfb9c7232975fce'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '67'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1ab15622287533de7a47f3e2012ebf18be'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '51'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '124'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1af11b8fa0082616e2b6e6e4238589d8a8'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '145'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a2eaf86f62d1f169b3763b03fbf88f70b'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '134'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adb997350478bdc0ab8eb5cc5623a2ad9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'config'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '172'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Initialises class private variables + @discussion This is the class single point for initialising private variables. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '154'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '190'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a60111950cc0a47e6223c22949faa15f3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '182'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Addr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '193'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a9d59c16cde5c3ffb30a881e9a61c9a32'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightPinMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '194'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a0eaa7c2ac1040a1786960618866c066e'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightStsMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '195'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a3436246b17062357066c636aa598b49d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '200'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aa0a878e97b6111abf1bc8d767a548cf2'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_En'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '197'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +I2CIO +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cio'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1ab70fc18e99a70e3293c4f6ba25c37efa'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rs'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '199'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a882df32eb9ae0e7a1b74f9a8ee4bffe9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rw'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '198'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + cp-fileline = '39'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 14; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 13; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '14'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 16; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 15; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '16'; + relation = public-inheritance; + }; /* node-child */ + node-child = { + child-id = '17'; + relation = usage; + edgelabel = <<_EnD_oF_dEf_TeXt_ +_i2cio +_EnD_oF_dEf_TeXt_; + }; /* node-child */ + }; /* node */ + node = { + node-id = 17; + node-label = 'I2CIO'; + node-link = { + node-link-id = 'class_i2_c_i_o'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___s_r'; + cp-name = 'LiquidCrystal_SR'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1ac3fe0b48f8d4c1c941d82d1333495cfc'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +TWO_WIRE +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '108'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LCD SHIFT REGISTER constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] pin for shiftregister data line. + @param srclock[in] pin for shiftregister clock line. + @param enable[in] optional direct enable pin for the LCD +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a03821351a32db07cb7e42c8c11ce8d47'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '122'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1ad9f3e3f36257984c23fb508973e14535'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '145'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode: backlight mode (HIGH|LOW) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a5bfc0dcc1f042bcb59992493a3a7231d'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '134'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + @warning Currently not supported + + @param mode: backlight mode (HIGH|LOW) + @param pol: backlight polarity +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a0f15bf3f5041a91469da5fd75aba5d5e'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lines'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'font'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '155'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a2684630ad69618fab065f53eea543df8'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'shiftIt'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'val'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '161'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract takes care of shifting and the enable pulse +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1acee96e0ef397441bdde73ca921160476'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_enable_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '163'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a68bffb6befc28cb716fb0c48b50f65fc'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockBit'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '169'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a507726b30de4b552b4e32faf9a3aa9e3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '168'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a9984b207beddba9ff299f9356f891065'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataBit'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '167'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a1e5bf3e5c6ec5b6c41f6949b6e34fd34'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '166'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a12e3ee583d454d5f52223beca91f5bae'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srEnableBit'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '171'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1adab0eb2bb7392a77375034530bf230eb'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srEnableRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '170'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1ad20f9d3282b047fdbae8e97b07d4fc89'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_two_wire'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '164'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + cp-fileline = '95'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 18; + node-label = 'LiquidCrystal_SR'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r'; + }; + node-child = { + child-id = '19'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 19; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 20; + node-label = 'LiquidCrystal_SR'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r'; + }; + node-child = { + child-id = '21'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 21; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___s_r2_w'; + cp-name = 'LiquidCrystal_SR2W'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1af307fdf5c8feb757e965074dcdeb1dd3'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR2W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'blpol'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +POSITIVE +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '151'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LCD 2 wire SHIFT REGISTER constructor. + @discussion Defines the pin assignments that connect to the shift register. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] Arduino pin for shift register data line. + @param srclock[in] Arduino pin for shift register clock line. + @param blpol[in] optional backlight polarity (default = POSITIVE) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a65dc6f261c319be8e56f3c1f6a5c877d'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '165'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2158db27287c1564a03e7a1472beb3b6'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '177'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode[in] backlight mode (0 off, non-zero on) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a12c14153e7056cb4a98310529bace6a8'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'blpol'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lines'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'font'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '186'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1ae369efcd3fca47a018a034f5f4a1679b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'loadSR'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'val'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '192'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract takes care of shifting and the enable pulse +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a3b1dfb83ad02274c30fa940a10619737'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_blMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '200'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a906f803e1ae324b5383fa004093124f4'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_blPolarity'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '199'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a27727d63c1ce0f9aada630814b8f022b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '197'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1aa36d38c009bf846e7726fc48c0067fc3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1ad188042fdcc7df0178248401c678eb8e'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '195'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2e43c3f1d6b0e5599a1b4d14ef428077'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '194'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + cp-fileline = '138'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 23; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 22; + node-label = 'LiquidCrystal_SR2W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r2_w'; + }; + node-child = { + child-id = '23'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 25; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 24; + node-label = 'LiquidCrystal_SR2W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r2_w'; + }; + node-child = { + child-id = '25'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___s_r3_w'; + cp-name = 'LiquidCrystal_SR3W'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ae1396bcd5e9c5b7ed13182c166de776b'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '90'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the IO driving the + shift register. The constructor does not initialize the LCD. + Default configuration: + Shift register LCD + QA - 0 DB4 + QB - 1 DB5 + QC - 2 DB6 + QD - 3 DB7 + QE - 4 E + QF - 5 + QG - 6 Rs + GND Rw + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to the shiftregister data pin. + @param clk[in] digital IO connected to the shiftregister clock pin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a7b2f382b76bc9d88adb8d681e824b4de'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a24f051747dfeda48f7b207c3358c8015'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '119'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4fab8ff2f21bba3efd133cd8c87fffc0'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '114'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the control lines of + the LCD and the shiftregister. The constructor does not initialize the LCD. + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to shiftregister data pin. + @param clk[in] digital IO connected to shiftregister clock pin. + @param En[in] LCD En (Enable) pin connected to SR output pin. + @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. + @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. + @param d4[in] LCD data 4 pin map to the SR output pin. + @param d5[in] LCD data 5 pin map to the SR output pin. + @param d6[in] LCD data 6 pin map to the SR output pin. + @param d7[in] LCD data 7 pin map to the SR output pin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ade34af5b7fe795482f1848c2176d6e56'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '133'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a6d0fc7907ef9fd87c408a21b9bd49295'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '154'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a894d0ea8ea61c1d15acd8a26d417e477'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '143'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a45cde916021d9b52b0f769c17886b2ef'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '165'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a80f6e4e8b10635d9daed718f2918c1bd'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'loadSR'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '183'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract load into the shift register a byte + @discussion loads into the shift register a byte + @param value[in]: value to be loaded into the shiftregister. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ac0702caa5d07ffd8e832ad8a5d0afe7c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '175'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a21ef2e5b78edd0d160d81b0c06d41440'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightPinMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1adf17379bfac4def5c780fc8ad023764c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightStsMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '197'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2c14746e8f626a53f777c8df68f8a92b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_clk'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '190'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1af7d09207dffb9f2fc85fc60661ffa0d4'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_clk_reg'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '191'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ab81049d446d2e7399ee6b20c9da4cdde'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '188'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a366adab314f5dc8b7e53298d6eccf85d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '195'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a301acb36345c56ae336156fdeee4a783'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_reg'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '189'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4306c59b6bf3870fecad23d6b0c0aa5d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_En'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '192'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a062da9fb985a7e88128d7d95fd8239d6'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rs'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '194'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1aef47417b089e53af1ce032e5f1b23b43'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rw'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '193'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a0d40b3c14c3f56fd341d41220f425925'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_strobe'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '186'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2a7d9703b04a91658b7a590b926ff9cd'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_strobe_reg'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '187'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + cp-fileline = '67'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 27; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 26; + node-label = 'LiquidCrystal_SR3W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r3_w'; + }; + node-child = { + child-id = '27'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 29; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 28; + node-label = 'LiquidCrystal_SR3W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r3_w'; + }; + node-child = { + child-id = '29'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +file = { + file-id = '_fast_i_o_8cpp'; + file-name = 'FastIO.cpp'; + func = { + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a83fc2fdc19ab3f9aade9e1a2f39e81a6'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalRead'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '96'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract direct digital read + @discussion without any checks + @discussion falls back to normal digitalRead if fast io is disabled + @param pinRegister[in] Register - ignored if fast io is disabled + @param pinBit[in] Bit - Pin if fast io is disabled + @result Value read from pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1ae91bbe682b02a5842c291055c0e998b5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalWrite'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '77'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract direct digital write + @discussion without any checks + @discussion falls back to normal digitalWrite if fast io is disabled + @param pinRegister[in] Register - ignored if fast digital write is disabled + @param pinBit[in] Bit - Pin if fast digital write is disabled + @param value[in] desired output +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a07a19dfbdca1afaca5d666bdaa3be7d5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToBit'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '66'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Find the bit which belongs to specified pin + @discussion if fast digitalWrite is disabled this function returns the pin + @param pin[in] Number of a digital pin + @result Bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1afb934fc0ded94cbb5ed8ed14e2a123ed'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToInputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '53'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the input register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a04210cc785c3b4a11c86f794949c327f'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToOutputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'initial_state'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '36'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the output register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a5d8d5977294d614d15bda19f75d6b787'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '161'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out clear + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a56c72b9f00680662229895ab22aaa743'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'bitOrder'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '111'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + @param bitOrder[in] bit order +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a7ac8b242e7e3cacf175e481889e047dd'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '265'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param pin[in] digital pin + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a5b4d1684030dc620938b7c2fbdf5ced8'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '192'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a2d0e4495eb12504255bbd3f82405b17b'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '182'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1ae4b2e099f8ade9ee674d1565669e870a'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '177'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param pin[in] digital pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_fast_i_o_8h'; + file-name = 'FastIO.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a04971fe5fabe4129736708c494e08e6d'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'ATOMIC_BLOCK'; + define-mem-param = { + define-mem-def-name = 'dummy'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +if(true) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '58'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a362c18b15a09703e42e1c246c47420ef'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'ATOMIC_RESTORESTATE'; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '59'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a89e1c62276052100c62b6c82a2e95622'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_HIGH'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit,HIGH) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '143'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + This is where the magic happens that makes things fast. + Implemented as preprocessor directives to force inlining + SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1ac8f00a1bccb98109531b88fbb6e91478'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_LOW'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit,LOW) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '144'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a6d1dffed7f0c8f28f6c88146315f7832'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_SWITCH'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit, !digitalRead(bit)) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '145'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1accae9687fdfc5f3492fb6344d62eb190'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_SWITCHTO'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'val'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit,val); +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '146'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a32f90d0ad5c1295c97cc1e79936aadd6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'FIO_FALLBACK'; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '57'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a688a4adbb87520a2b68681bd6bfb199e'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SKIP'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x23 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + typedef = { + typedef-member = { + typedef-mem-kind = 'typedef'; + typedef-mem-id = '_fast_i_o_8h_1a0a595a88b29bcfd1540b6fac75787937'; + typedef-mem-virt = normal; + typedef-mem-prot = public; + typedef-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + typedef-mem-name = 'fio_bit'; + typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + typedef-mem-desc-line = '60'; + typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* typedef-member */ + typedef-member = { + typedef-mem-kind = 'typedef'; + typedef-mem-id = '_fast_i_o_8h_1ae44ea3af54ef26db03f1ae2ea62f9c1f'; + typedef-mem-virt = normal; + typedef-mem-prot = public; + typedef-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + typedef-mem-name = 'fio_register'; + typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + typedef-mem-desc-line = '61'; + typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* typedef-member */ + }; + func = { + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a197336e47e1c3f929056ce3abbbc7e8d'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalRead'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '158'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract direct digital read + @discussion without any checks + @discussion falls back to normal digitalRead if fast io is disabled + @param pinRegister[in] Register - ignored if fast io is disabled + @param pinBit[in] Bit - Pin if fast io is disabled + @result Value read from pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1ae91bbe682b02a5842c291055c0e998b5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalWrite'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '128'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract direct digital write + @discussion without any checks + @discussion falls back to normal digitalWrite if fast io is disabled + @param pinRegister[in] Register - ignored if fast digital write is disabled + @param pinBit[in] Bit - Pin if fast digital write is disabled + @param value[in] desired output +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a07a19dfbdca1afaca5d666bdaa3be7d5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToBit'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '115'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Find the bit which belongs to specified pin + @discussion if fast digitalWrite is disabled this function returns the pin + @param pin[in] Number of a digital pin + @result Bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1afb934fc0ded94cbb5ed8ed14e2a123ed'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToInputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '106'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the input register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a385ae40d960c1a57e86818332476a802'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToOutputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'initial_state'; + func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LOW +_EnD_oF_dEf_TeXt_; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '97'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the output register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a5d8d5977294d614d15bda19f75d6b787'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '184'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out clear + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a56c72b9f00680662229895ab22aaa743'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'bitOrder'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '172'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + @param bitOrder[in] bit order +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a33ce251dcd6b448185cda415a99001cf'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +false +_EnD_oF_dEf_TeXt_; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '194'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1af2aac35d9a8ab7a2c87672f2c7cbbafb'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +false +_EnD_oF_dEf_TeXt_; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '202'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param pin[in] digital pin + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a2d0e4495eb12504255bbd3f82405b17b'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '210'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1ae4b2e099f8ade9ee674d1565669e870a'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '217'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param pin[in] digital pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_i2_c_i_o_8cpp'; + file-name = 'I2CIO.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_i2_c_i_o_8h'; + file-name = 'I2CIO.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = '_I2CIO_VERSION'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +"1.0.0" +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + define-mem-desc-line = '32'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8cpp'; + file-name = 'LCD.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8h'; + file-name = 'LCD.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a0f50ae3b4bdb42dd5ad74b2c604a7515'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'BACKLIGHT_OFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '151'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Backlight off constant declaration + @discussion Used in combination with the setBacklight to swith off the + LCD backlight. @set setBacklight +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa5bad1c51f5fac029f3deacfef48c54b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'BACKLIGHT_ON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +255 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '159'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Backlight on constant declaration + @discussion Used in combination with the setBacklight to swith on the + LCD backlight. @set setBacklight +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab0d87e07831e7e4943caef187872123e'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'COMMAND'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '132'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aad9ae913bdfab20dd94ad04ee2d5b045'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'DATA'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '133'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa1e30e32b6c2cf8d90a9281328472dbe'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'FOUR_BITS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '134'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ad25b138788d83e67f840588754e2df2f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'HOME_CLEAR_EXEC'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '143'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Defines the duration of the home and clear commands + @discussion This constant defines the time it takes for the home and clear + commands in the LCD - Time in microseconds. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_1LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '125'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_2LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '124'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_4BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '123'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x10DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '126'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x8DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '127'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_8BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '122'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '111'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '110'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CLEARDISPLAY'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '88'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract All these definitions shouldn't be used unless you are writing + a driver. + @discussion All these definitions are for driver implementation only and + shouldn't be used by applications. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '116'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSOROFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '109'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '108'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORSHIFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '92'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYCONTROL'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '115'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '107'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '106'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYLEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '100'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYMODESET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYRIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '99'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '102'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '101'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_FUNCTIONSET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x20 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '93'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVELEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '118'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVERIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '117'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_RETURNHOME'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '89'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETCGRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x40 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '94'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETDDRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '95'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + enum = { + enum-member = { + enum-mem-kind = 'enum'; + enum-mem-id = '_l_c_d_8h_1aeeef728bf4726268aa5e99391a1502bc'; + enum-mem-virt = normal; + enum-mem-prot = public; + enum-mem-name = 't_backlighPol'; + enum-mem-enum = { enum-name = POSITIVE; }; + enum-mem-enum = { enum-name = NEGATIVE; }; + enum-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + enum-mem-desc-line = '167'; + enum-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + enum-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* enum-member */ + }; + func = { + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_l_c_d_8h_1a6eac41e4be58d7736ac0c19de225c0dc'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +static void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'waitUsec'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint16_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'uSec'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + func-mem-desc-line = '72'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Enables disables fast waits for write operations for LCD + @discussion If defined, the library will avoid doing un-necessary waits. + this can be done, because the time taken by Arduino's slow digitalWrite + operations. If fast digitalIO operations, comment this line out or undefine + the mode. + + + @function + @abstract waits for a given time in microseconds (compilation dependent). + @discussion Waits for a given time defined in microseconds depending on + the FAST_MODE define. If the FAST_MODE is defined the call will return + inmediatelly. + @param uSec[in] time in microseconds. + @result None +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8cpp'; + file-name = 'LiquidCrystal.cpp'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8cpp_1a31e1c14e8c2845dec3301f0ebd36b43c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_4BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + define-mem-desc-line = '45'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8cpp_1a57d84af8cf61ceee4eb91db77889f071'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_8BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + define-mem-desc-line = '46'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0xFF +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8h'; + file-name = 'LiquidCrystal.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8h_1adebff0f00a59c9f9863bc196938d5726'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'EXEC_TIME'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +37 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Command execution time on the LCD. + @discussion This defines how long a command takes to execute by the LCD. + The time is expressed in micro-seconds. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8cpp'; + file-name = 'LiquidCrystal_I2C.cpp'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D4'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '88'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D5'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '89'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D6'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D7'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +3 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'EN'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +6 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '66'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Enable +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0xFF +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '55'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '48'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_NOBACKLIGHT + @discussion NO BACKLIGHT MASK +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1af8903d8eea3868940c60af887473b152'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +4 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '80'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Register select pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1afc4ded33ac0ca43defcce639e965748a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RW'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +5 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '73'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Rw pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8h'; + file-name = 'LiquidCrystal_I2C.h'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r_8cpp'; + file-name = 'LiquidCrystal_SR.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r_8h'; + file-name = 'LiquidCrystal_SR.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r_8h_1a0075b041d82abb47f279dce482e7b087'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR_EN_BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + define-mem-desc-line = '92'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r_8h_1afdaa2bbb2cc185700864ac8d7a570ced'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR_RS_BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r_8h_1a40fb1f76bc5f8ca9e6534b47bd6da27c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'TWO_WIRE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +204 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r2_w_8cpp'; + file-name = 'LiquidCrystal_SR2W.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r2_w_8h'; + file-name = 'LiquidCrystal_SR2W.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1a53e3add69865ae57ca872cb41fcae9e3'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_BL_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '132'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1a7cf86f2a173473d01e02b2ac786a8690'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_DATA_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x78 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '134'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1a8d17b6abb5bcde6883dbdc86d34be9d8'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_EN_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '135'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1acce98b026d9fdcb2e126705c14af7500'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_RS_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '133'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r3_w_8cpp'; + file-name = 'LiquidCrystal_SR3W.cpp'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D4'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '126'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D5'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '127'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D6'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '128'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D7'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +3 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '129'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'EN'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +4 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '104'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Enable +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0xFF +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '93'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '86'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_NOBACKLIGHT + @discussion No BACKLIGHT MASK +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1af8903d8eea3868940c60af887473b152'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +6 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '118'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Register select pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1afc4ded33ac0ca43defcce639e965748a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RW'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +5 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '111'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Rw pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r3_w_8h'; + file-name = 'LiquidCrystal_SR3W.h'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ diff --git a/LiquidCrystal/docs/def/doxygen.def.txt b/LiquidCrystal/docs/def/doxygen.def.txt new file mode 100644 index 0000000..8f4275f --- /dev/null +++ b/LiquidCrystal/docs/def/doxygen.def.txt @@ -0,0 +1,2897 @@ +AutoGen Definitions dummy; +class = { + cp-id = 'class_i2_c_i_o'; + cp-name = 'I2CIO'; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'I2CIO'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '51'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Constructor method + @discussion Class constructor constructor. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'i2cAddr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '63'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the device. + @discussion This method initializes the device allocating an I2C address. + This method is the first method that should be call prior to calling any + other method form this class. On initialization all pins are configured + as INPUT on the device. + @param i2cAddr: I2C Address where the device is located. + @result 1 if the device was initialized correctly, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pinMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '73'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets the mode of a particular pin. + @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite + has no effect on pins which are not declared as output. + @param pin: Pin from the I2C IO expander to be configured. Range 0..7 + @param dir: Pin direction (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'portMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '83'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets all the pins of the device in a particular direction. + @discussion This method sets all the pins of the device in a particular + direction. This method is useful to set all the pins of the device to be + either inputs or outputs. + @param dir: Direction of all the pins of the device (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'read'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Reads all the pins of the device that are configured as INPUT. + @discussion Reads from the device the status of the pins that are configured + as INPUT. During initialization all pins are configured as INPUTs by default. + Please refer to pinMode or portMode. + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalRead'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '106'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Read a pin from the device. + @discussion Reads a particular pin from the device. To read a particular + pin it has to be configured as INPUT. During initialization all pins are + configured as INPUTs by default. Please refer to pinMode or portMode. + @param pin: Pin from the port to read its status. Range (0..7) + @result Returns the pin status (HIGH, LOW) if the pin is configured + as an output, reading its value will always return LOW regardless of its + real state. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '120'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Write a value to the device. + @discussion Writes to a set of pins in the device. The value is the binary + representation of all the pins in device. The value written is masked with + the configuration of the direction of the pins; to change the state of + a particular pin with this method, such pin has to be configured as OUTPUT + using the portMode or pinMode methods. If no pins have been configured as + OUTPUTs this method will have no effect. + @param value: value to be written to the device. + @result 1 on success, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalWrite'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'level'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes a digital level to a particular pin. + @discussion Write a level to the indicated pin of the device. For this + method to have effect, the pin has to be configured as OUTPUT using the + pinMode or portMode methods. + @param pin: device pin to change level. Range (0..7). + @para level: logic level to set the pin at (HIGH, LOW). + @result 1 on success, 0 otherwise. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_shadow'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '137'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_dirMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '138'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cAddr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '139'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +bool +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_initialised'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '140'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + cp-fileline = '44'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_l_c_d'; + cp-name = 'LCD'; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___i2_c'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LCD'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '104'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LiquidCrystal abstract constructor. + @discussion LiquidCrystal class abstract constructor needed to create + the base abstract class. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a5b7aee49867828a0160a142b9109c07a'; + sec-mem-virt = pure-virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '120'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + This method is pure abstract, it is dependent on each derived class from + this base class to implement the internals of how the LCD is initialized + and configured. + + @param cols the number of columns that the display has + @param rows the number of rows that the display has +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'clear'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Clears the LCD. + @discussion Clears the LCD screen and positions the cursor in the upper-left + corner. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'home'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '145'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the cursor to the upper-left corner. + @discussion Positions the cursor in the upper-left of the LCD. + That is, use that location in outputting subsequent text to the display. + To also clear the display, use the clear() function instead. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noDisplay'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '155'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the LCD display. + @discussion Turns off the LCD display, without losing the text currently + being displayed on it. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'display'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '166'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on the LCD display. + @discussion Turns on the LCD display, after it's been turned off with + noDisplay(). This will restore the text (and cursor location) that was on + the display prior to calling noDisplay(). + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBlink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '174'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the blinking of the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'blink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '184'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the cursor of the LCD. + @discussion Display the blinking LCD cursor. If used in combination with + the cursor() function, the result will depend on the particular display. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noCursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '192'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Hides the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'cursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '202'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the LCD cursor. + @discussion Display the LCD cursor: an underscore (line) at the location + where the next character will be written. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '211'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the left. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '220'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the right. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'leftToRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '233'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to left-to-right. + @discussion Set the direction for text written to the LCD to left-to-right. + All subsequent characters written to the display will go from left to right, + but does not affect previously-output text. + + This is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'rightToLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '246'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to right-to-left. + @discussion Set the direction for text written to the LCD to right-to-left. + All subsequent characters written to the display will go from right to left, + but does not affect previously-output text. + + left-to-right is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'autoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '261'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on automatic scrolling of the LCD. + @discussion Turns on automatic scrolling of the LCD. This causes each + character output to the display to push previous characters over by one + space. If the current text direction is left-to-right (the default), + the display scrolls to the left; if the current direction is right-to-left, + the display scrolls to the right. + This has the effect of outputting each new character to the same location on + the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noAutoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '271'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off automatic scrolling of the LCD. + @discussion Turns off automatic scrolling of the LCD, this is the default + configuration of the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'createChar'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'location'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charmap'; + sec-mem-param-array = '[]'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '289'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Creates a custom character for use on the LCD. + @discussion Create a custom character (glyph) for use on the LCD. + Most chipsets only support up to eight characters of 5x8 pixels. Therefore, + this methods has been limited to locations (numbered 0 to 7). + + The appearance of each custom character is specified by an array of eight + bytes, one for each row. The five least significant bits of each byte + determine the pixels in that row. To display a custom character on screen, + write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. + + @param location: LCD memory location of the character to create + (0 to 7) + @param charmap: the bitmap array representing each row of the character. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setCursor'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'col'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'row'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '300'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Position the LCD cursor. + @discussion Sets the position of the LCD cursor. Set the location at which + subsequent text written to the LCD will be displayed. + + @param col LCD column + @param row LCD row - line. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'command'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '314'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a command to the LCD. + @discussion This method sends a command to the LCD by setting the Register + select line of the LCD. + + This command shouldn't be used to drive the LCD, only to implement any other + feature that is not available on this library. + + @param value Command value to send to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1acf471f0d9fea7ea3f5c3279519c8b32c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +size_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '327'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Writes to the LCD. + @discussion This method writes character to the LCD in the current cursor + position. + + This is the virtual write method, implemented in the Print class, therefore + all Print class methods will end up calling this method. + + @param value Value to write to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a121fac7d916284d71af8b1fdd9ade2f6'; + sec-mem-virt = pure-virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '342'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD. This is a pure abstract + method, therefore, it is implementation dependent of each derived class how + to physically write to the LCD. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'protected-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displayfunction'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '349'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaycontrol'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '351'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaymode'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '353'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_numlines'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '354'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + cp-fileline = '95'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 2; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 3; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 4; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal'; + cp-name = 'LiquidCrystal'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '50'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 8 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '53'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '62'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 4 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '64'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1adb5f37d69809ed7c0772c74a4adff19b'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '79'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + @param cols: the number of columns that the display has + @param rows: the number of rows that the display has + @param charsize: size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'fourbitmode'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '105'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1adebd21f2955b1e193a6d24367833fd63'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write8bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '112'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 8 bit value to the LCD. + @discussion Writes 8 bits to the LCD control data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a52837217db49272eea03c9056cab36a8'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '119'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '127'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rs_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '129'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rw_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '130'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_enable_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '131'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + cp-fileline = '40'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 7; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 6; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '7'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 9; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 8; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '9'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___i2_c'; + cp-name = 'LiquidCrystal_I2C'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '84'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr: I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '98'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + @param cols: the number of columns that the display has + @param rows: the number of rows that the display has + @param charsize: size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '112'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value: Value to send to the LCD. + @result mode: LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a576f1f5813f55f34333d6d7e9fe53ad3'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBacklight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '122'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-off the LCD backlight. + @discussion Switch-off the LCD backlight, this method is not supported by + the I2CLCDextraIO, it needs an extra IO pin to drive the LCD backlight + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a9f296e0d26f8b6a4509d8d4b9d738c03'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'backlight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on the LCD backlight. + @discussion Switch-on the LCD backlight, this method is not supported by + the I2CLCDextraIO, it needs an extra IO pin to drive the LCD backlight + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '142'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aebb0b9f000b94cc3ab026e0154d6ecef'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '149'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = '_data'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '157'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a4c63780ceef67e90750d3e4bbdb83402'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'expanderWrite'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = '_data'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '165'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes to the expansion module. + @discussion Writes a byte to the IO expansion module. This will be applied + to all its outputs. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Addr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '167'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1af99934fdb39403e02d68981ad8366e6b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_cols'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '168'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adb3edf6c68b018a37293a926c4816127'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rows'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '169'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1af63a2b732d345d55abfcb83bf962c8d3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightval'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '170'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +I2CIO +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cio'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '171'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + cp-fileline = '72'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 11; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 10; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '11'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 13; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 12; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '13'; + relation = public-inheritance; + }; /* node-child */ + node-child = { + child-id = '14'; + relation = usage; + edgelabel = <<_EnD_oF_dEf_TeXt_ +_i2cio +_EnD_oF_dEf_TeXt_; + }; /* node-child */ + }; /* node */ + node = { + node-id = 14; + node-label = 'I2CIO'; + node-link = { + node-link-id = 'class_i2_c_i_o'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +file = { + file-id = '_i2_c_i_o_8cpp'; + file-name = 'I2CIO.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_i2_c_i_o_8h'; + file-name = 'I2CIO.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = '_I2CIO_VERSION'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +"1.0.0" +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + define-mem-desc-line = '34'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8cpp'; + file-name = 'LCD.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8h'; + file-name = 'LCD.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CLEARDISPLAY'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '53'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract All these definitions shouldn't be used unless you are writing + a driver. + @discussion All these definitions are for driver implementation only and + shouldn't be used by applications. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_RETURNHOME'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '54'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYMODESET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '55'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYCONTROL'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '56'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORSHIFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '57'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_FUNCTIONSET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x20 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '58'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETCGRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x40 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '59'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETDDRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '60'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYRIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '64'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYLEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '65'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '66'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '67'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '71'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '72'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '73'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSOROFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '74'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '75'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '76'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '80'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '81'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVERIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '82'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVELEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '83'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_8BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '87'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_4BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '88'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_2LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '89'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_1LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x10DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x8DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '92'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8cpp'; + file-name = 'LiquidCrystal.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8h'; + file-name = 'LiquidCrystal.h'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8cpp'; + file-name = 'LiquidCrystal_I2C.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8h'; + file-name = 'LiquidCrystal_I2C.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1ac059d24dfe9c1e1f7c07cb7869a1833b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '41'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1ab5ef25ebfe582f7bf0d93e2770548e2c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'En'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +B01000000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '54'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @warning These definitions will have to be changed should the IOExpander be + connected differently to this default. + + + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Enable +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1a98b6a2661a04ebbc1b3f38da70306814'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'Rw'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +B00100000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '61'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Rw pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1a345d1a871beb9e772c3bf9ef75412bb5'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'Rs'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +B00010000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '68'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Register select pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ diff --git a/LiquidCrystal/docs/html/_fast_i_o_8cpp.html b/LiquidCrystal/docs/html/_fast_i_o_8cpp.html new file mode 100644 index 0000000..06d5bac --- /dev/null +++ b/LiquidCrystal/docs/html/_fast_i_o_8cpp.html @@ -0,0 +1,549 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp File Reference
+
+
+
#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + +

+Functions

int fio_digitalRead (fio_register pinRegister, uint8_t pinBit)
void fio_digitalWrite (fio_register pinRegister, fio_bit pinBit, uint8_t value)
fio_bit fio_pinToBit (uint8_t pin)
fio_register fio_pinToInputRegister (uint8_t pin)
fio_register fio_pinToOutputRegister (uint8_t pin, uint8_t initial_state)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit, uint8_t value, uint8_t bitOrder)
void fio_shiftOut1 (uint8_t pin, uint8_t value, boolean noLatch)
void fio_shiftOut1 (fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch)
void fio_shiftOut1_init (fio_register shift1Register, fio_bit shift1Bit)
void fio_shiftOut1_init (uint8_t pin)
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int fio_digitalRead (fio_register pinRegister,
fio_bit pinBit 
)
+
+
+

direct digital read without any checks falls back to normal digitalRead if fast io is disabled

+
Parameters:
+ + + +
pinRegister[in]Register - ignored if fast io is disabled
pinBit[in]Bit - Pin if fast io is disabled
+
+
+
Returns:
Value read from pin
+ +

Definition at line 95 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_digitalWrite (fio_register pinRegister,
fio_bit pinBit,
uint8_t value 
)
+
+
+

direct digital write without any checks falls back to normal digitalWrite if fast io is disabled

+
Parameters:
+ + + + +
pinRegister[in]Register - ignored if fast digital write is disabled
pinBit[in]Bit - Pin if fast digital write is disabled
value[in]desired output
+
+
+ +

Definition at line 76 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_bit fio_pinToBit (uint8_t pin)
+
+
+

Find the bit which belongs to specified pin if fast digitalWrite is disabled this function returns the pin

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Bit
+ +

Definition at line 65 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_register fio_pinToInputRegister (uint8_t pin)
+
+
+

Get the input register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 52 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
fio_register fio_pinToOutputRegister (uint8_t pin,
uint8_t initial_state = LOW 
)
+
+
+

Get the output register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 35 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit 
)
+
+
+

faster shift out clear using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
+
+
+ +

Definition at line 159 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit,
uint8_t value,
uint8_t bitOrder 
)
+
+
+

faster shift out using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
bitOrder[in]bit order
+
+
+ +

Definition at line 108 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (uint8_t pin,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + +
pin[in]digital pin
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 264 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (fio_register shift1Register,
fio_bit shift1Bit,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 190 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void fio_shiftOut1_init (fio_register shift1Register,
fio_bit shift1Bit 
)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
+
+
+ +

Definition at line 181 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void fio_shiftOut1_init (uint8_t pin)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + +
pin[in]digital pin
+
+
+ +

Definition at line 176 of file FastIO.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html b/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html new file mode 100644 index 0000000..af9f776 --- /dev/null +++ b/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html @@ -0,0 +1,351 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Florian Fida on 20/01/12
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //        http://creativecommons.org/licenses/by-sa/3.0/
+00006 //
+00007 // This software is furnished "as is", without technical support, and with no
+00008 // warranty, express or implied, as to its usefulness for any purpose.
+00009 // ---------------------------------------------------------------------------
+00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
+00011 // (http://www.romanblack.com/shift1.htm)
+00012 //
+00013 // Thread Safe: No
+00014 // Extendable: Yes
+00015 //
+00016 // @file FastIO.h
+00017 // This file implements basic fast IO routines.
+00018 // 
+00019 // @brief 
+00020 //
+00021 // @version API 1.0.0
+00022 //
+00023 // @author Florian Fida -
+00024 //
+00025 // 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster
+00026 //
+00027 // @todo:
+00028 //  support chipkit:
+00029 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
+00030 //   cores/pic32/wiring_digital.c)
+00031 // ---------------------------------------------------------------------------
+00032 #include "FastIO.h"
+00033 
+00034 
+00035 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state)
+00036 {
+00037         pinMode(pin, OUTPUT);
+00038    
+00039         if(initial_state != SKIP) 
+00040    {
+00041       digitalWrite(pin, initial_state); // also turns off pwm timer
+00042    }
+00043 #ifdef FIO_FALLBACK
+00044         //  just wasting memory if not using fast io...
+00045         return 0;
+00046 #else
+00047         return portOutputRegister(digitalPinToPort(pin));
+00048 #endif
+00049 }
+00050 
+00051 
+00052 fio_register fio_pinToInputRegister(uint8_t pin)
+00053 {
+00054         pinMode(pin, INPUT);
+00055         digitalWrite(pin, LOW); // also turns off pwm timer and pullup
+00056 #ifdef FIO_FALLBACK
+00057         //  just wasting memory if not using fast io...
+00058         return 0;
+00059 #else
+00060         return portInputRegister(digitalPinToPort(pin));
+00061 #endif
+00062 }
+00063 
+00064 
+00065 fio_bit fio_pinToBit(uint8_t pin)
+00066 {
+00067 #ifdef FIO_FALLBACK
+00068         // (ab)use the bit variable to store the pin
+00069         return pin;
+00070 #else
+00071         return digitalPinToBitMask(pin);
+00072 #endif
+00073 }
+00074 
+00075 
+00076 void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value) 
+00077 {
+00078 #ifdef FIO_FALLBACK
+00079         digitalWrite(pinBit, value);
+00080 #else
+00081    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00082    {
+00083       if(value == LOW)
+00084       {
+00085          fio_digitalWrite_LOW(pinRegister,pinBit);
+00086       }
+00087       else
+00088       {
+00089          fio_digitalWrite_HIGH(pinRegister,pinBit);
+00090       }
+00091    }
+00092 #endif
+00093 }
+00094 
+00095 int fio_digitalRead(fio_register pinRegister, uint8_t pinBit)
+00096 {
+00097 #ifdef FIO_FALLBACK
+00098         return digitalRead (pinBit);
+00099 #else
+00100         if (*pinRegister & pinBit)
+00101    {
+00102       return HIGH;
+00103    }
+00104         return LOW;
+00105 #endif
+00106 }
+00107 
+00108 void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, 
+00109                    fio_register clockRegister, fio_bit clockBit, 
+00110                    uint8_t value, uint8_t bitOrder)
+00111 {
+00112         // # disable interrupts
+00113         int8_t i;
+00114    
+00115         if(bitOrder == LSBFIRST)
+00116         {
+00117                 for(i = 0; i < 8; i++)
+00118                 {
+00119                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00120                         {
+00121                                 if(value & 1)
+00122             {
+00123                fio_digitalWrite_HIGH(dataRegister, dataBit);
+00124                                 }
+00125             else
+00126             {
+00127                fio_digitalWrite_LOW(dataRegister, dataBit);
+00128             }
+00129             value >>= 1;
+00130                                 fio_digitalWrite_HIGH (clockRegister, clockBit);
+00131                                 fio_digitalWrite_LOW (clockRegister,clockBit);
+00132                         }
+00133                 }
+00134       
+00135         }
+00136         else
+00137         {
+00138                 for(i = 0; i < 8; i++)
+00139                 {
+00140                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00141                         {
+00142                                 if(value & 0x80)
+00143             {
+00144                fio_digitalWrite_HIGH(dataRegister, dataBit);
+00145                                 }
+00146             else
+00147             {
+00148                fio_digitalWrite_LOW(dataRegister, dataBit);
+00149             }
+00150                                 value <<= 1;
+00151                                 fio_digitalWrite_HIGH (clockRegister, clockBit);
+00152                                 fio_digitalWrite_LOW (clockRegister,clockBit);
+00153                         }
+00154                 }
+00155         }
+00156 }
+00157 
+00158 
+00159 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, 
+00160                   fio_register clockRegister, fio_bit clockBit)
+00161 {
+00162    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00163    {
+00164       // shift out 0x0 (B00000000) fast, byte order is irrelevant
+00165       fio_digitalWrite_LOW (dataRegister, dataBit);
+00166       
+00167       for(uint8_t i = 0; i<8; ++i)
+00168       {
+00169          fio_digitalWrite_HIGH (clockRegister, clockBit);
+00170          fio_digitalWrite_SWITCH (clockRegister, clockBit);
+00171       }
+00172    }
+00173 }
+00174 
+00175 
+00176 void fio_shiftOut1_init(uint8_t pin)
+00177 {
+00178         fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin));
+00179 }
+00180 
+00181 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit)
+00182 {
+00183         // Make sure that capacitors are charged
+00184         // 300us is an educated guess...
+00185         fio_digitalWrite(shift1Register,shift1Bit,HIGH);
+00186         delayMicroseconds(300);
+00187 }
+00188 
+00189 
+00190 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, 
+00191                    boolean noLatch)
+00192 {
+00193         /*
+00194          * this function are based on Shif1 protocol developed by Roman Black 
+00195     *    (http://www.romanblack.com/shift1.htm)
+00196          *
+00197          * test sketches:
+00198          *      http://pastebin.com/raw.php?i=2hnC9v2Z
+00199          *      http://pastebin.com/raw.php?i=bGg4DhXQ
+00200          *      http://pastebin.com/raw.php?i=tg1ZFiM5
+00201          *    http://pastebin.com/raw.php?i=93ExPDD3 - cascading
+00202          * tested with:
+00203          *      TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/
+00204     *                   arduino-one-wire-shift-register-prototype)
+00205          *      7HC595N
+00206          */
+00207    
+00208         // iterate but ignore last bit (is it correct now?)
+00209         for(int8_t i = 7; i>=0; --i)
+00210    {
+00211       
+00212                 // assume that pin is HIGH (smokin' pot all day... :) - requires 
+00213       // initialization
+00214                 if(value & _BV(i))
+00215       {
+00216          ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00217          {
+00218             // HIGH = 1 Bit
+00219             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
+00220             //hold pin LOW for 1us - done! :)
+00221             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
+00222          } // end critical section
+00223          //hold pin HIGH for 15us
+00224          delayMicroseconds(15);
+00225                 }
+00226       else
+00227       {
+00228          ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00229          {
+00230             // LOW = 0 Bit
+00231             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
+00232             // hold pin LOW for 15us
+00233             delayMicroseconds(15);
+00234             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
+00235          } // end critical section
+00236          
+00237          // hold pin HIGH for 30us
+00238          delayMicroseconds(30);         
+00239                 }
+00240                 if(!noLatch && i==1)
+00241       {
+00242          break;
+00243       }
+00244         }
+00245    
+00246         if(!noLatch)
+00247    {
+00248       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00249       {
+00250          // send last bit (=LOW) and Latch command
+00251          fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
+00252       } // end critical section
+00253       delayMicroseconds(199);           // Hold pin low for 200us
+00254       
+00255       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00256       {
+00257          fio_digitalWrite_HIGH(shift1Register,shift1Bit);
+00258       } // end critical section
+00259                 delayMicroseconds(299);   // Hold pin high for 300us and leave it that 
+00260       // way - using explicit HIGH here, just in case.
+00261         }
+00262 }
+00263 
+00264 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch)
+00265 {
+00266         fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch);
+00267 }
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_fast_i_o_8h.html b/LiquidCrystal/docs/html/_fast_i_o_8h.html new file mode 100644 index 0000000..b840b04 --- /dev/null +++ b/LiquidCrystal/docs/html/_fast_i_o_8h.html @@ -0,0 +1,786 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h File Reference
+
+
+
#include <WProgram.h>
+#include <pins_arduino.h>
+#include <inttypes.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define ATOMIC_BLOCK(dummy)   if(true)
#define ATOMIC_RESTORESTATE
#define fio_digitalWrite_HIGH(reg, bit)   digitalWrite(bit,HIGH)
#define fio_digitalWrite_LOW(reg, bit)   digitalWrite(bit,LOW)
#define fio_digitalWrite_SWITCH(reg, bit)   digitalWrite(bit, !digitalRead(bit))
#define fio_digitalWrite_SWITCHTO(reg, bit, val)   digitalWrite(bit,val);
#define FIO_FALLBACK
#define SKIP   0x23

+Typedefs

typedef uint8_t fio_bit
typedef uint8_t fio_register

+Functions

int fio_digitalRead (fio_register pinRegister, fio_bit pinBit)
void fio_digitalWrite (fio_register pinRegister, fio_bit pinBit, uint8_t value)
fio_bit fio_pinToBit (uint8_t pin)
fio_register fio_pinToInputRegister (uint8_t pin)
fio_register fio_pinToOutputRegister (uint8_t pin, uint8_t initial_state=LOW)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit, uint8_t value, uint8_t bitOrder)
void fio_shiftOut1 (fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch=false)
void fio_shiftOut1 (uint8_t pin, uint8_t value, boolean noLatch=false)
void fio_shiftOut1_init (fio_register shift1Register, fio_bit shift1Bit)
void fio_shiftOut1_init (uint8_t pin)
+

Define Documentation

+ +
+
+ + + + + + + + +
#define ATOMIC_BLOCK( dummy)   if(true)
+
+
+ +

Definition at line 58 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
#define ATOMIC_RESTORESTATE
+
+
+ +

Definition at line 59 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_HIGH( reg,
 bit 
)   digitalWrite(bit,HIGH)
+
+
+

This is where the magic happens that makes things fast. Implemented as preprocessor directives to force inlining SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known.

+ +

Definition at line 143 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_LOW( reg,
 bit 
)   digitalWrite(bit,LOW)
+
+
+ +

Definition at line 144 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_SWITCH( reg,
 bit 
)   digitalWrite(bit, !digitalRead(bit))
+
+
+ +

Definition at line 145 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_SWITCHTO( reg,
 bit,
 val 
)   digitalWrite(bit,val);
+
+
+ +

Definition at line 146 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
#define FIO_FALLBACK
+
+
+ +

Definition at line 57 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
#define SKIP   0x23
+
+
+ +

Definition at line 42 of file FastIO.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t fio_bit
+
+
+ +

Definition at line 60 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
typedef uint8_t fio_register
+
+
+ +

Definition at line 61 of file FastIO.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int fio_digitalRead (fio_register pinRegister,
fio_bit pinBit 
)
+
+
+

direct digital read without any checks falls back to normal digitalRead if fast io is disabled

+
Parameters:
+ + + +
pinRegister[in]Register - ignored if fast io is disabled
pinBit[in]Bit - Pin if fast io is disabled
+
+
+
Returns:
Value read from pin
+ +

Definition at line 95 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_digitalWrite (fio_register pinRegister,
fio_bit pinBit,
uint8_t value 
)
+
+
+

direct digital write without any checks falls back to normal digitalWrite if fast io is disabled

+
Parameters:
+ + + + +
pinRegister[in]Register - ignored if fast digital write is disabled
pinBit[in]Bit - Pin if fast digital write is disabled
value[in]desired output
+
+
+ +

Definition at line 76 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_bit fio_pinToBit (uint8_t pin)
+
+
+

Find the bit which belongs to specified pin if fast digitalWrite is disabled this function returns the pin

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Bit
+ +

Definition at line 65 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_register fio_pinToInputRegister (uint8_t pin)
+
+
+

Get the input register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 52 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
fio_register fio_pinToOutputRegister (uint8_t pin,
uint8_t initial_state = LOW 
)
+
+
+

Get the output register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 35 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit 
)
+
+
+

faster shift out clear using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
+
+
+ +

Definition at line 159 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit,
uint8_t value,
uint8_t bitOrder 
)
+
+
+

faster shift out using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
bitOrder[in]bit order
+
+
+ +

Definition at line 108 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (fio_register shift1Register,
fio_bit shift1Bit,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 190 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (uint8_t pin,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + +
pin[in]digital pin
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 264 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void fio_shiftOut1_init (fio_register shift1Register,
fio_bit shift1Bit 
)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
+
+
+ +

Definition at line 181 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void fio_shiftOut1_init (uint8_t pin)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + +
pin[in]digital pin
+
+
+ +

Definition at line 176 of file FastIO.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_fast_i_o_8h_source.html b/LiquidCrystal/docs/html/_fast_i_o_8h_source.html new file mode 100644 index 0000000..b17f76f --- /dev/null +++ b/LiquidCrystal/docs/html/_fast_i_o_8h_source.html @@ -0,0 +1,209 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Florian Fida on 20/01/12
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //        http://creativecommons.org/licenses/by-sa/3.0/
+00006 //
+00007 // This software is furnished "as is", without technical support, and with no
+00008 // warranty, express or implied, as to its usefulness for any purpose.
+00009 // ---------------------------------------------------------------------------
+00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
+00011 // (http://www.romanblack.com/shift1.htm)
+00012 //
+00013 // Thread Safe: No
+00014 // Extendable: Yes
+00015 //
+00016 // @file FastIO.h
+00017 // This file implements basic fast IO routines.
+00018 // 
+00019 // @brief 
+00020 //
+00021 // @version API 1.0.0
+00022 //
+00023 // @author Florian Fida -
+00024 // 2012-03-16 bperrybap mods for chipkit32 (pic32) Arduino
+00025 //  support chipkit:
+00026 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
+00027 //   cores/pic32/wiring_digital.c)
+00028 // ---------------------------------------------------------------------------
+00029 #ifndef _FAST_IO_H_
+00030 #define _FAST_IO_H_
+00031 
+00032 #if (ARDUINO <  100)
+00033 #include <WProgram.h>
+00034 #else
+00035 #include <Arduino.h>
+00036 #endif
+00037 
+00038 #include <pins_arduino.h> // pleasing sanguino core
+00039 #include <inttypes.h>
+00040 
+00041 
+00042 #define SKIP 0x23
+00043 
+00044 #if defined (__AVR__)
+00045 #include <util/atomic.h> // for critical section management
+00046 typedef uint8_t fio_bit;
+00047 typedef volatile uint8_t *fio_register;
+00048 
+00049 
+00050 #elif defined(__PIC32MX__)
+00051 typedef uint32_t fio_bit;
+00052 typedef volatile uint32_t *fio_register;
+00053 
+00054 
+00055 #else
+00056 // fallback to Arduino standard digital i/o routines
+00057 #define FIO_FALLBACK
+00058 #define ATOMIC_BLOCK(dummy) if(true)
+00059 #define ATOMIC_RESTORESTATE
+00060 typedef uint8_t fio_bit;
+00061 typedef uint8_t fio_register;
+00062 #endif
+00063 
+00064 
+00065 
+00066 #if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK)
+00067 /*
+00068  * Define an ATOMIC_BLOCK that implements ATOMIC_FORCEON type
+00069  * Using the portable Arduino interrupts() and noInterrupts()
+00070  */
+00071 #define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet.
+00072 #define ATOMIC_FORCEON uint8_t sreg_save \
+00073               __attribute__((__cleanup__(__iSeiParam))) = 0
+00074 
+00075 static __inline__ uint8_t __iCliRetVal(void)
+00076 {
+00077         noInterrupts();
+00078         return(1);
+00079 }
+00080 static __inline__ void __iSeiParam(const uint8_t *__s)
+00081 {
+00082         interrupts();
+00083 }
+00084 #define ATOMIC_BLOCK(type) for(type,  __Todo = __iCliRetVal(); __Todo; __Todo = 0)
+00085 
+00086 #endif // end of block to create compatible ATOMIC_BLOCK()
+00087 
+00088 
+00089 
+00097 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
+00098 
+00106 fio_register fio_pinToInputRegister(uint8_t pin);
+00107 
+00115 fio_bit fio_pinToBit(uint8_t pin);
+00116 
+00117 
+00127 // __attribute__ ((always_inline)) /* let the optimizer decide that for now */
+00128 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
+00129 
+00136 #ifndef FIO_FALLBACK
+00137 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
+00138 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
+00139 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
+00140 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
+00141 #else
+00142 // reg -> dummy NULL, bit -> pin
+00143 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
+00144 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
+00145 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
+00146 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
+00147 #endif
+00148 
+00158 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
+00159 
+00171 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, 
+00172                   fio_bit clockBit, uint8_t value, uint8_t bitOrder );
+00173 
+00184 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
+00185 
+00194 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false);
+00202 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false);
+00210 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
+00217 void fio_shiftOut1_init(uint8_t pin);
+00218 
+00219 #endif // FAST_IO_H
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html b/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html new file mode 100644 index 0000000..36e213d --- /dev/null +++ b/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html @@ -0,0 +1,92 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp File Reference
+
+
+
#include <WProgram.h>
+#include <inttypes.h>
+#include <../Wire/Wire.h>
+#include "I2CIO.h"
+
+

Go to the source code of this file.

+ +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html b/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html new file mode 100644 index 0000000..332da7b --- /dev/null +++ b/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html @@ -0,0 +1,282 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file I2CIO.h
+00013 // This file implements a basic IO library using the PCF8574 I2C IO Expander
+00014 // chip.
+00015 // 
+00016 // @brief 
+00017 // Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC.
+00018 // The library implements basic IO general methods to configure IO pin direction
+00019 // read and write uint8_t operations and basic pin level routines to set or read
+00020 // a particular IO port.
+00021 //
+00022 //
+00023 // @version API 1.0.0
+00024 //
+00025 // @author F. Malpartida - fmalpartida@gmail.com
+00026 // ---------------------------------------------------------------------------
+00027 #if (ARDUINO <  100)
+00028 #include <WProgram.h>
+00029 #else
+00030 #include <Arduino.h>
+00031 #endif
+00032 
+00033 #include <inttypes.h>
+00034 
+00035 #include <../Wire/Wire.h>
+00036 #include "I2CIO.h"
+00037 
+00038 // CLASS VARIABLES
+00039 // ---------------------------------------------------------------------------
+00040 
+00041 
+00042 // CONSTRUCTOR
+00043 // ---------------------------------------------------------------------------
+00044 I2CIO::I2CIO ( )
+00045 {
+00046    _i2cAddr     = 0x0;
+00047    _dirMask     = 0xFF;    // mark all as INPUTs
+00048    _shadow      = 0x0;     // no values set
+00049    _initialised = false;
+00050 }
+00051 
+00052 // PUBLIC METHODS
+00053 // ---------------------------------------------------------------------------
+00054 
+00055 //
+00056 // begin
+00057 int I2CIO::begin (  uint8_t i2cAddr )
+00058 {
+00059    _i2cAddr = i2cAddr;
+00060    
+00061    Wire.begin ( );
+00062       
+00063    _initialised = Wire.requestFrom ( _i2cAddr, (uint8_t)1 );
+00064 
+00065 #if (ARDUINO <  100)
+00066    _shadow = Wire.receive ();
+00067 #else
+00068    _shadow = Wire.read (); // Remove the byte read don't need it.
+00069 #endif
+00070    
+00071    return ( _initialised );
+00072 }
+00073 
+00074 //
+00075 // pinMode
+00076 void I2CIO::pinMode ( uint8_t pin, uint8_t dir )
+00077 {
+00078    if ( _initialised )
+00079    {
+00080       if ( OUTPUT == dir )
+00081       {
+00082          _dirMask &= ~( 1 << pin );
+00083       }
+00084       else 
+00085       {
+00086          _dirMask |= ( 1 << pin );
+00087       }
+00088    }
+00089 }
+00090 
+00091 //
+00092 // portMode
+00093 void I2CIO::portMode ( uint8_t dir )
+00094 {
+00095    
+00096    if ( _initialised )
+00097    {
+00098       if ( dir == INPUT )
+00099       {
+00100          _dirMask = 0xFF;
+00101       }
+00102       else
+00103       {
+00104          _dirMask = 0x00;
+00105       }
+00106    }
+00107 }
+00108 
+00109 //
+00110 // read
+00111 uint8_t I2CIO::read ( void )
+00112 {
+00113    uint8_t retVal = 0;
+00114    
+00115    if ( _initialised )
+00116    {
+00117       Wire.requestFrom ( _i2cAddr, (uint8_t)1 );
+00118 #if (ARDUINO <  100)
+00119       retVal = ( _dirMask & Wire.receive ( ) );
+00120 #else
+00121       retVal = ( _dirMask & Wire.read ( ) );
+00122 #endif      
+00123       
+00124    }
+00125    return ( retVal );
+00126 }
+00127 
+00128 //
+00129 // write
+00130 int I2CIO::write ( uint8_t value )
+00131 {
+00132    int status = 0;
+00133    
+00134    if ( _initialised )
+00135    {
+00136       // Only write HIGH the values of the ports that have been initialised as
+00137       // outputs updating the output shadow of the device
+00138       _shadow = ( value & ~(_dirMask) );
+00139    
+00140       Wire.beginTransmission ( _i2cAddr );
+00141 #if (ARDUINO <  100)
+00142       Wire.send ( _shadow );
+00143 #else
+00144       Wire.write ( _shadow );
+00145 #endif  
+00146       status = Wire.endTransmission ();
+00147    }
+00148    return ( (status == 0) );
+00149 }
+00150 
+00151 //
+00152 // digitalRead
+00153 uint8_t I2CIO::digitalRead ( uint8_t pin )
+00154 {
+00155    uint8_t pinVal = 0;
+00156    
+00157    // Check if initialised and that the pin is within range of the device
+00158    // -------------------------------------------------------------------
+00159    if ( ( _initialised ) && ( pin <= 7 ) )
+00160    {
+00161       // Remove the values which are not inputs and get the value of the pin
+00162       pinVal = this->read() & _dirMask;
+00163       pinVal = ( pinVal >> pin ) & 0x01; // Get the pin value
+00164    }
+00165    return (pinVal);
+00166 }
+00167 
+00168 //
+00169 // digitalWrite
+00170 int I2CIO::digitalWrite ( uint8_t pin, uint8_t level )
+00171 {
+00172    uint8_t writeVal;
+00173    int status = 0;
+00174    
+00175    // Check if initialised and that the pin is within range of the device
+00176    // -------------------------------------------------------------------
+00177    if ( ( _initialised ) && ( pin <= 7 ) )
+00178    {
+00179       // Only write to HIGH the port if the port has been configured as
+00180       // an OUTPUT pin. Add the new state of the pin to the shadow
+00181       writeVal = ( 1 << pin ) & ~_dirMask;
+00182       if ( level == HIGH )
+00183       {
+00184          _shadow |= writeVal;
+00185                                                       
+00186       }
+00187       else 
+00188       {
+00189          _shadow &= ~writeVal;
+00190       }
+00191       status = this->write ( _shadow );
+00192    }
+00193    return ( status );
+00194 }
+00195 
+00196 //
+00197 // PRIVATE METHODS
+00198 // ---------------------------------------------------------------------------
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_i2_c_i_o_8h.html b/LiquidCrystal/docs/html/_i2_c_i_o_8h.html new file mode 100644 index 0000000..be27c2c --- /dev/null +++ b/LiquidCrystal/docs/html/_i2_c_i_o_8h.html @@ -0,0 +1,114 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h File Reference
+
+
+
#include <inttypes.h>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  I2CIO

+Defines

#define _I2CIO_VERSION   "1.0.0"
+

Define Documentation

+ +
+
+ + + + +
#define _I2CIO_VERSION   "1.0.0"
+
+
+ +

Definition at line 32 of file I2CIO.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html b/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html new file mode 100644 index 0000000..23d77fd --- /dev/null +++ b/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html @@ -0,0 +1,147 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file I2CIO.h
+00013 // This file implements a basic IO library using the PCF8574 I2C IO Expander
+00014 // chip.
+00015 // 
+00016 // @brief 
+00017 // Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC.
+00018 // The library implements basic IO general methods to configure IO pin direction
+00019 // read and write uint8_t operations and basic pin level routines to set or read
+00020 // a particular IO port.
+00021 //
+00022 // @version API 1.0.0
+00023 //
+00024 // @author F. Malpartida - fmalpartida@gmail.com
+00025 // ---------------------------------------------------------------------------
+00026 
+00027 #ifndef _I2CIO_H_
+00028 #define _I2CIO_H_
+00029 
+00030 #include <inttypes.h>
+00031 
+00032 #define _I2CIO_VERSION "1.0.0"
+00033 
+00041 class I2CIO  
+00042 {
+00043 public:
+00049    I2CIO ( );
+00050    
+00062    int begin ( uint8_t i2cAddr );
+00063    
+00073    void pinMode ( uint8_t pin, uint8_t dir );
+00074    
+00083    void portMode ( uint8_t dir );
+00084    
+00094    uint8_t read ( void );
+00095    
+00108    uint8_t digitalRead ( uint8_t pin );
+00109    
+00123    int write ( uint8_t value );
+00124    
+00136    int digitalWrite ( uint8_t pin, uint8_t level );
+00137    
+00138    
+00139    
+00140 private:
+00141    uint8_t _shadow;      // Shadow output
+00142    uint8_t _dirMask;     // Direction mask
+00143    uint8_t _i2cAddr;     // I2C address
+00144    bool    _initialised; // Initialised object
+00145    
+00146 };
+00147 
+00148 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_l_c_d_8cpp.html b/LiquidCrystal/docs/html/_l_c_d_8cpp.html new file mode 100644 index 0000000..af4ed6f --- /dev/null +++ b/LiquidCrystal/docs/html/_l_c_d_8cpp.html @@ -0,0 +1,93 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LCD.h"
+
+

Go to the source code of this file.

+ +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html b/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html new file mode 100644 index 0000000..275807e --- /dev/null +++ b/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html @@ -0,0 +1,431 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LCD.cpp
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the HD44780 library of the
+00018 // Arduino SDK. This library is a refactored version of the one supplied
+00019 // in the Arduino SDK in such a way that it simplifies its extension
+00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, ...
+00021 // The original library has been reworked in such a way that this will be
+00022 // the base class implementing all generic methods to command an LCD based
+00023 // on the Hitachi HD44780 and compatible chipsets.
+00024 //
+00025 // This base class is a pure abstract class and needs to be extended. As reference,
+00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
+00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
+00028 //
+00029 //
+00030 // @version API 1.1.0
+00031 //
+00032 // 2012.03.29 bperrybap - changed comparision to use LCD_5x8DOTS rather than 0
+00033 // @author F. Malpartida - fmalpartida@gmail.com
+00034 // ---------------------------------------------------------------------------
+00035 #include <stdio.h>
+00036 #include <string.h>
+00037 #include <inttypes.h>
+00038 
+00039 #if (ARDUINO <  100)
+00040 #include <WProgram.h>
+00041 #else
+00042 #include <Arduino.h>
+00043 #endif
+00044 #include "LCD.h"
+00045 
+00046 // CLASS CONSTRUCTORS
+00047 // ---------------------------------------------------------------------------
+00048 // Constructor
+00049 LCD::LCD () 
+00050 {
+00051    
+00052 }
+00053 
+00054 // PUBLIC METHODS
+00055 // ---------------------------------------------------------------------------
+00056 // When the display powers up, it is configured as follows:
+00057 //
+00058 // 1. Display clear
+00059 // 2. Function set: 
+00060 //    DL = 1; 8-bit interface data 
+00061 //    N = 0; 1-line display 
+00062 //    F = 0; 5x8 dot character font 
+00063 // 3. Display on/off control: 
+00064 //    D = 0; Display off 
+00065 //    C = 0; Cursor off 
+00066 //    B = 0; Blinking off 
+00067 // 4. Entry mode set: 
+00068 //    I/D = 1; Increment by 1 
+00069 //    S = 0; No shift 
+00070 //
+00071 // Note, however, that resetting the Arduino doesn't reset the LCD, so we
+00072 // can't assume that its in that state when a sketch starts (and the
+00073 // LiquidCrystal constructor is called).
+00074 // A call to begin() will reinitialize the LCD.
+00075 //
+00076 void LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
+00077 {
+00078    if (lines > 1) 
+00079    {
+00080       _displayfunction |= LCD_2LINE;
+00081    }
+00082    _numlines = lines;
+00083    _cols = cols;
+00084    
+00085    // for some 1 line displays you can select a 10 pixel high font
+00086    // ------------------------------------------------------------
+00087    if ((dotsize != LCD_5x8DOTS) && (lines == 1)) 
+00088    {
+00089       _displayfunction |= LCD_5x10DOTS;
+00090    }
+00091    
+00092    // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
+00093    // according to datasheet, we need at least 40ms after power rises above 2.7V
+00094    // before sending commands. Arduino can turn on way before 4.5V so we'll wait 
+00095    // 50
+00096    // ---------------------------------------------------------------------------
+00097    delay (100); // 100ms delay
+00098    
+00099    //put the LCD into 4 bit or 8 bit mode
+00100    // -------------------------------------
+00101    if (! (_displayfunction & LCD_8BITMODE)) 
+00102    {
+00103       // this is according to the hitachi HD44780 datasheet
+00104       // figure 24, pg 46
+00105       
+00106       // we start in 8bit mode, try to set 4 bit mode
+00107       send(0x03, FOUR_BITS);
+00108       delayMicroseconds(4500); // wait min 4.1ms
+00109       
+00110       // second try
+00111       send ( 0x03, FOUR_BITS );
+00112       delayMicroseconds(4500); // wait min 4.1ms
+00113       
+00114       // third go!
+00115       send( 0x03, FOUR_BITS );
+00116       delayMicroseconds(150);
+00117       
+00118       // finally, set to 4-bit interface
+00119       send ( 0x02, FOUR_BITS ); 
+00120    } 
+00121    else 
+00122    {
+00123       // this is according to the hitachi HD44780 datasheet
+00124       // page 45 figure 23
+00125       
+00126       // Send function set command sequence
+00127       command(LCD_FUNCTIONSET | _displayfunction);
+00128       delayMicroseconds(4500);  // wait more than 4.1ms
+00129       
+00130       // second try
+00131       command(LCD_FUNCTIONSET | _displayfunction);
+00132       delayMicroseconds(150);
+00133       
+00134       // third go
+00135       command(LCD_FUNCTIONSET | _displayfunction);
+00136    }
+00137    
+00138    // finally, set # lines, font size, etc.
+00139    command(LCD_FUNCTIONSET | _displayfunction);  
+00140    
+00141    // turn the display on with no cursor or blinking default
+00142    _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;  
+00143    display();
+00144    
+00145    // clear the LCD
+00146    clear();
+00147    
+00148    // Initialize to default text direction (for romance languages)
+00149    _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
+00150    // set the entry mode
+00151    command(LCD_ENTRYMODESET | _displaymode);
+00152 
+00153    backlight();
+00154 
+00155 }
+00156 
+00157 // Common LCD Commands
+00158 // ---------------------------------------------------------------------------
+00159 void LCD::clear()
+00160 {
+00161    command(LCD_CLEARDISPLAY);             // clear display, set cursor position to zero
+00162    delayMicroseconds(HOME_CLEAR_EXEC);    // this command is time consuming
+00163 }
+00164 
+00165 void LCD::home()
+00166 {
+00167    command(LCD_RETURNHOME);             // set cursor position to zero
+00168    delayMicroseconds(HOME_CLEAR_EXEC);  // This command is time consuming
+00169 }
+00170 
+00171 void LCD::setCursor(uint8_t col, uint8_t row)
+00172 {
+00173    const byte row_offsetsDef[]   = { 0x00, 0x40, 0x14, 0x54 }; // For regular LCDs
+00174    const byte row_offsetsLarge[] = { 0x00, 0x40, 0x10, 0x50 }; // For 16x4 LCDs
+00175    
+00176    if ( row >= _numlines ) 
+00177    {
+00178       row = _numlines-1;    // rows start at 0
+00179    }
+00180    
+00181    // 16x4 LCDs have special memory map layout
+00182    // ----------------------------------------
+00183    if ( _cols == 16 && _numlines == 4 )
+00184    {
+00185       command(LCD_SETDDRAMADDR | (col + row_offsetsLarge[row]));
+00186    }
+00187    else 
+00188    {
+00189       command(LCD_SETDDRAMADDR | (col + row_offsetsDef[row]));
+00190    }
+00191    
+00192 }
+00193 
+00194 // Turn the display on/off
+00195 void LCD::noDisplay() 
+00196 {
+00197    _displaycontrol &= ~LCD_DISPLAYON;
+00198    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00199 }
+00200 
+00201 void LCD::display() 
+00202 {
+00203    _displaycontrol |= LCD_DISPLAYON;
+00204    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00205 }
+00206 
+00207 // Turns the underline cursor on/off
+00208 void LCD::noCursor() 
+00209 {
+00210    _displaycontrol &= ~LCD_CURSORON;
+00211    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00212 }
+00213 void LCD::cursor() 
+00214 {
+00215    _displaycontrol |= LCD_CURSORON;
+00216    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00217 }
+00218 
+00219 // Turns on/off the blinking cursor
+00220 void LCD::noBlink() 
+00221 {
+00222    _displaycontrol &= ~LCD_BLINKON;
+00223    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00224 }
+00225 
+00226 void LCD::blink() 
+00227 {
+00228    _displaycontrol |= LCD_BLINKON;
+00229    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00230 }
+00231 
+00232 // These commands scroll the display without changing the RAM
+00233 void LCD::scrollDisplayLeft(void) 
+00234 {
+00235    command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
+00236 }
+00237 
+00238 void LCD::scrollDisplayRight(void) 
+00239 {
+00240    command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
+00241 }
+00242 
+00243 // This is for text that flows Left to Right
+00244 void LCD::leftToRight(void) 
+00245 {
+00246    _displaymode |= LCD_ENTRYLEFT;
+00247    command(LCD_ENTRYMODESET | _displaymode);
+00248 }
+00249 
+00250 // This is for text that flows Right to Left
+00251 void LCD::rightToLeft(void) 
+00252 {
+00253    _displaymode &= ~LCD_ENTRYLEFT;
+00254    command(LCD_ENTRYMODESET | _displaymode);
+00255 }
+00256 
+00257 // This method moves the cursor one space to the right
+00258 void LCD::moveCursorRight(void)
+00259 {
+00260    command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVERIGHT);
+00261 }
+00262 
+00263 // This method moves the cursor one space to the left
+00264 void LCD::moveCursorLeft(void)
+00265 {
+00266    command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVELEFT);
+00267 }
+00268 
+00269 
+00270 // This will 'right justify' text from the cursor
+00271 void LCD::autoscroll(void) 
+00272 {
+00273    _displaymode |= LCD_ENTRYSHIFTINCREMENT;
+00274    command(LCD_ENTRYMODESET | _displaymode);
+00275 }
+00276 
+00277 // This will 'left justify' text from the cursor
+00278 void LCD::noAutoscroll(void) 
+00279 {
+00280    _displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
+00281    command(LCD_ENTRYMODESET | _displaymode);
+00282 }
+00283 
+00284 // Write to CGRAM of new characters
+00285 void LCD::createChar(uint8_t location, uint8_t charmap[]) 
+00286 {
+00287    location &= 0x7;            // we only have 8 locations 0-7
+00288    
+00289    command(LCD_SETCGRAMADDR | (location << 3));
+00290    delayMicroseconds(30);
+00291    
+00292    for (int i=0; i<8; i++) 
+00293    {
+00294       write(charmap[i]);      // call the virtual write method
+00295       delayMicroseconds(40);
+00296    }
+00297 }
+00298 
+00299 //
+00300 // Switch on the backlight
+00301 void LCD::backlight ( void )
+00302 {
+00303    setBacklight(255);
+00304 }
+00305 
+00306 //
+00307 // Switch off the backlight
+00308 void LCD::noBacklight ( void )
+00309 {
+00310    setBacklight(0);
+00311 }
+00312 
+00313 //
+00314 // Switch fully on the LCD (backlight and LCD)
+00315 void LCD::on ( void )
+00316 {
+00317    display();
+00318    backlight();
+00319 }
+00320 
+00321 //
+00322 // Switch fully off the LCD (backlight and LCD) 
+00323 void LCD::off ( void )
+00324 {
+00325    noBacklight();
+00326    noDisplay();
+00327 }
+00328 
+00329 // General LCD commands - generic methods used by the rest of the commands
+00330 // ---------------------------------------------------------------------------
+00331 void LCD::command(uint8_t value) 
+00332 {
+00333    send(value, COMMAND);
+00334 }
+00335 
+00336 #if (ARDUINO <  100)
+00337 void LCD::write(uint8_t value)
+00338 {
+00339    send(value, DATA);
+00340 }
+00341 #else
+00342 size_t LCD::write(uint8_t value) 
+00343 {
+00344    send(value, DATA);
+00345    return 1;             // assume OK
+00346 }
+00347 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_l_c_d_8h.html b/LiquidCrystal/docs/html/_l_c_d_8h.html new file mode 100644 index 0000000..19ad58f --- /dev/null +++ b/LiquidCrystal/docs/html/_l_c_d_8h.html @@ -0,0 +1,711 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h File Reference
+
+
+
#include <WProgram.h>
+#include <inttypes.h>
+#include <Print.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  LCD

+Defines

#define BACKLIGHT_OFF   0
#define BACKLIGHT_ON   255
#define COMMAND   0
#define DATA   1
#define FOUR_BITS   2
#define HOME_CLEAR_EXEC   2000
#define LCD_1LINE   0x00
#define LCD_2LINE   0x08
#define LCD_4BITMODE   0x00
#define LCD_5x10DOTS   0x04
#define LCD_5x8DOTS   0x00
#define LCD_8BITMODE   0x10
#define LCD_BLINKOFF   0x00
#define LCD_BLINKON   0x01
#define LCD_CLEARDISPLAY   0x01
#define LCD_CURSORMOVE   0x00
#define LCD_CURSOROFF   0x00
#define LCD_CURSORON   0x02
#define LCD_CURSORSHIFT   0x10
#define LCD_DISPLAYCONTROL   0x08
#define LCD_DISPLAYMOVE   0x08
#define LCD_DISPLAYOFF   0x00
#define LCD_DISPLAYON   0x04
#define LCD_ENTRYLEFT   0x02
#define LCD_ENTRYMODESET   0x04
#define LCD_ENTRYRIGHT   0x00
#define LCD_ENTRYSHIFTDECREMENT   0x00
#define LCD_ENTRYSHIFTINCREMENT   0x01
#define LCD_FUNCTIONSET   0x20
#define LCD_MOVELEFT   0x00
#define LCD_MOVERIGHT   0x04
#define LCD_RETURNHOME   0x02
#define LCD_SETCGRAMADDR   0x40
#define LCD_SETDDRAMADDR   0x80

+Enumerations

enum  t_backlighPol { POSITIVE, +NEGATIVE + }

+Functions

static void waitUsec (uint16_t uSec)
+

Define Documentation

+ +
+
+ + + + +
#define BACKLIGHT_OFF   0
+
+
+

Backlight off constant declaration Used in combination with the setBacklight to swith off the LCD backlight. setBacklight

+ +

Definition at line 151 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define BACKLIGHT_ON   255
+
+
+

Backlight on constant declaration Used in combination with the setBacklight to swith on the LCD backlight. setBacklight

+ +

Definition at line 159 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define COMMAND   0
+
+
+ +

Definition at line 132 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define DATA   1
+
+
+ +

Definition at line 133 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define FOUR_BITS   2
+
+
+ +

Definition at line 134 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define HOME_CLEAR_EXEC   2000
+
+
+

Defines the duration of the home and clear commands This constant defines the time it takes for the home and clear commands in the LCD - Time in microseconds.

+ +

Definition at line 143 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_1LINE   0x00
+
+
+ +

Definition at line 125 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_2LINE   0x08
+
+
+ +

Definition at line 124 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_4BITMODE   0x00
+
+
+ +

Definition at line 123 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_5x10DOTS   0x04
+
+
+ +

Definition at line 126 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_5x8DOTS   0x00
+
+
+ +

Definition at line 127 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_8BITMODE   0x10
+
+
+ +

Definition at line 122 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_BLINKOFF   0x00
+
+
+ +

Definition at line 111 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_BLINKON   0x01
+
+
+ +

Definition at line 110 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CLEARDISPLAY   0x01
+
+
+

All these definitions shouldn't be used unless you are writing a driver. All these definitions are for driver implementation only and shouldn't be used by applications.

+ +

Definition at line 88 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSORMOVE   0x00
+
+
+ +

Definition at line 116 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSOROFF   0x00
+
+
+ +

Definition at line 109 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSORON   0x02
+
+
+ +

Definition at line 108 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSORSHIFT   0x10
+
+
+ +

Definition at line 92 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYCONTROL   0x08
+
+
+ +

Definition at line 91 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYMOVE   0x08
+
+
+ +

Definition at line 115 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYOFF   0x00
+
+
+ +

Definition at line 107 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYON   0x04
+
+
+ +

Definition at line 106 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYLEFT   0x02
+
+
+ +

Definition at line 100 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYMODESET   0x04
+
+
+ +

Definition at line 90 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYRIGHT   0x00
+
+
+ +

Definition at line 99 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYSHIFTDECREMENT   0x00
+
+
+ +

Definition at line 102 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYSHIFTINCREMENT   0x01
+
+
+ +

Definition at line 101 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_FUNCTIONSET   0x20
+
+
+ +

Definition at line 93 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_MOVELEFT   0x00
+
+
+ +

Definition at line 118 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_MOVERIGHT   0x04
+
+
+ +

Definition at line 117 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_RETURNHOME   0x02
+
+
+ +

Definition at line 89 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_SETCGRAMADDR   0x40
+
+
+ +

Definition at line 94 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_SETDDRAMADDR   0x80
+
+
+ +

Definition at line 95 of file LCD.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum t_backlighPol
+
+
+
Enumerator:
+ + +
POSITIVE  +
NEGATIVE  +
+
+
+ +

Definition at line 167 of file LCD.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
static void waitUsec (uint16_t uSec) [inline, static]
+
+
+

Enables disables fast waits for write operations for LCD If defined, the library will avoid doing un-necessary waits. this can be done, because the time taken by Arduino's slow digitalWrite operations. If fast digitalIO operations, comment this line out or undefine the mode.

+

waits for a given time in microseconds (compilation dependent). Waits for a given time defined in microseconds depending on the FAST_MODE define. If the FAST_MODE is defined the call will return inmediatelly.

+
Parameters:
+ + +
uSec[in]time in microseconds.
+
+
+
Returns:
None
+ +

Definition at line 71 of file LCD.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_l_c_d_8h_source.html b/LiquidCrystal/docs/html/_l_c_d_8h_source.html new file mode 100644 index 0000000..496e98e --- /dev/null +++ b/LiquidCrystal/docs/html/_l_c_d_8h_source.html @@ -0,0 +1,301 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LCD.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. This library is a refactored version of the one supplied
+00019 // in the Arduino SDK in such a way that it simplifies its extension
+00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, 
+00021 // The original library has been reworked in such a way that this will be
+00022 // the base class implementing all generic methods to command an LCD based
+00023 // on the Hitachi HD44780 and compatible chipsets.
+00024 //
+00025 // This base class is a pure abstract class and needs to be extended. As reference,
+00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
+00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
+00028 //
+00029 // The functionality provided by this class and its base class is identical
+00030 // to the original functionality of the Arduino LiquidCrystal library.
+00031 //
+00032 // @version API 1.1.0
+00033 //
+00034 //
+00035 // @author F. Malpartida - fmalpartida@gmail.com
+00036 // ---------------------------------------------------------------------------
+00037 #ifndef _LCD_H_
+00038 #define _LCD_H_
+00039 
+00040 #if (ARDUINO <  100)
+00041 #include <WProgram.h>
+00042 #else
+00043 #include <Arduino.h>
+00044 #endif
+00045 
+00046 #include <inttypes.h>
+00047 #include <Print.h>
+00048 
+00049 
+00058 #ifdef __AVR__
+00059 #define FAST_MODE
+00060 #endif
+00061 
+00071 inline static void waitUsec ( uint16_t uSec )
+00072 {
+00073 #ifndef FAST_MODE
+00074    delayMicroseconds ( uSec );
+00075 #endif // FAST_MODE
+00076 }
+00077 
+00078 
+00086 // LCD Commands
+00087 // ---------------------------------------------------------------------------
+00088 #define LCD_CLEARDISPLAY        0x01
+00089 #define LCD_RETURNHOME          0x02
+00090 #define LCD_ENTRYMODESET        0x04
+00091 #define LCD_DISPLAYCONTROL      0x08
+00092 #define LCD_CURSORSHIFT         0x10
+00093 #define LCD_FUNCTIONSET         0x20
+00094 #define LCD_SETCGRAMADDR        0x40
+00095 #define LCD_SETDDRAMADDR        0x80
+00096 
+00097 // flags for display entry mode
+00098 // ---------------------------------------------------------------------------
+00099 #define LCD_ENTRYRIGHT          0x00
+00100 #define LCD_ENTRYLEFT           0x02
+00101 #define LCD_ENTRYSHIFTINCREMENT 0x01
+00102 #define LCD_ENTRYSHIFTDECREMENT 0x00
+00103 
+00104 // flags for display on/off and cursor control
+00105 // ---------------------------------------------------------------------------
+00106 #define LCD_DISPLAYON           0x04
+00107 #define LCD_DISPLAYOFF          0x00
+00108 #define LCD_CURSORON            0x02
+00109 #define LCD_CURSOROFF           0x00
+00110 #define LCD_BLINKON             0x01
+00111 #define LCD_BLINKOFF            0x00
+00112 
+00113 // flags for display/cursor shift
+00114 // ---------------------------------------------------------------------------
+00115 #define LCD_DISPLAYMOVE         0x08
+00116 #define LCD_CURSORMOVE          0x00
+00117 #define LCD_MOVERIGHT           0x04
+00118 #define LCD_MOVELEFT            0x00
+00119 
+00120 // flags for function set
+00121 // ---------------------------------------------------------------------------
+00122 #define LCD_8BITMODE            0x10
+00123 #define LCD_4BITMODE            0x00
+00124 #define LCD_2LINE               0x08
+00125 #define LCD_1LINE               0x00
+00126 #define LCD_5x10DOTS            0x04
+00127 #define LCD_5x8DOTS             0x00
+00128 
+00129 
+00130 // Define COMMAND and DATA LCD Rs (used by send method).
+00131 // ---------------------------------------------------------------------------
+00132 #define COMMAND                 0
+00133 #define DATA                    1
+00134 #define FOUR_BITS               2
+00135 
+00136 
+00143 #define HOME_CLEAR_EXEC      2000
+00144 
+00151 #define BACKLIGHT_OFF           0
+00152 
+00159 #define BACKLIGHT_ON          255
+00160 
+00161 
+00167 typedef enum { POSITIVE, NEGATIVE } t_backlighPol;
+00168 
+00169 class LCD : public Print 
+00170 {
+00171 public:
+00172    
+00179    LCD ( );
+00180    
+00196    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
+00197    
+00208    void clear();
+00209    
+00221    void home();
+00222    
+00231    void noDisplay();
+00232    
+00242    void display();
+00243    
+00250    void noBlink();
+00251    
+00260    void blink();
+00261    
+00268    void noCursor();
+00269    
+00278    void cursor();
+00279    
+00287    void scrollDisplayLeft();
+00288    
+00296    void scrollDisplayRight();
+00297    
+00309    void leftToRight();
+00310    
+00322    void rightToLeft();
+00323    
+00330    void moveCursorLeft();
+00331    
+00332    
+00339    void moveCursorRight();
+00340    
+00354    void autoscroll();
+00355    
+00364    void noAutoscroll();
+00365    
+00382    void createChar(uint8_t location, uint8_t charmap[]);
+00383    
+00393    void setCursor(uint8_t col, uint8_t row);
+00394    
+00402    void backlight ( void );
+00403    
+00411    void noBacklight ( void );
+00412    
+00420    void on ( void );
+00421 
+00429    void off ( void );
+00430    
+00431    //
+00432    // virtual class methods
+00433    // --------------------------------------------------------------------------
+00444    virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };
+00445    
+00463    virtual void setBacklight ( uint8_t value ) { };
+00464    
+00476 #if (ARDUINO <  100)
+00477    virtual void write(uint8_t value);
+00478 #else
+00479    virtual size_t write(uint8_t value);
+00480 #endif
+00481    
+00482 #if (ARDUINO <  100)
+00483    using Print::write;
+00484 #else
+00485    using Print::write;
+00486 #endif   
+00487    
+00488 protected:
+00489    // Internal LCD variables to control the LCD shared between all derived
+00490    // classes.
+00491    uint8_t _displayfunction;  // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or 
+00492                               // LCD_8BITMODE, LCD_1LINE or LCD_2LINE
+00493    uint8_t _displaycontrol;   // LCD base control command LCD on/off, blink, cursor
+00494                               // all commands are "ored" to its contents.
+00495    uint8_t _displaymode;      // Text entry mode to the LCD
+00496    uint8_t _numlines;         // Number of lines of the LCD, initialized with begin()
+00497    uint8_t _cols;             // Number of columns in the LCD
+00498    t_backlighPol _polarity;   // Backlight polarity
+00499    
+00500 private:
+00513    void command(uint8_t value);
+00514 
+00528 #if (ARDUINO <  100)
+00529    virtual void send(uint8_t value, uint8_t mode) { };
+00530 #else
+00531    virtual void send(uint8_t value, uint8_t mode) = 0;
+00532 #endif
+00533    
+00534 };
+00535 
+00536 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html b/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html new file mode 100644 index 0000000..c7ad311 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html @@ -0,0 +1,146 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LiquidCrystal.h"
+
+

Go to the source code of this file.

+ + + + + +

+Defines

#define LCD_4BIT   1
#define LCD_8BIT   0
#define LCD_NOBACKLIGHT   0xFF
+

Define Documentation

+ +
+
+ + + + +
#define LCD_4BIT   1
+
+
+ +

Definition at line 45 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_8BIT   0
+
+
+ +

Definition at line 46 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_NOBACKLIGHT   0xFF
+
+
+ +

Definition at line 42 of file LiquidCrystal.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html b/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html new file mode 100644 index 0000000..1760c1c --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html @@ -0,0 +1,383 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal.cpp
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using the parallel port of
+00021 // the LCD (4 bit and 8 bit).
+00022 //
+00023 // The functionality provided by this class and its base class is identical
+00024 // to the original functionality of the Arduino LiquidCrystal library.
+00025 //
+00026 //
+00027 // @author F. Malpartida - fmalpartida@gmail.com
+00028 // ---------------------------------------------------------------------------
+00029 #include <stdio.h>
+00030 #include <string.h>
+00031 #include <inttypes.h>
+00032 
+00033 #if (ARDUINO <  100)
+00034 #include <WProgram.h>
+00035 #else
+00036 #include <Arduino.h>
+00037 #endif
+00038 #include "LiquidCrystal.h"
+00039 
+00040 // CONSTANT  definitions
+00041 // ---------------------------------------------------------------------------
+00042 #define LCD_NOBACKLIGHT 0xFF
+00043 
+00044 // LCD driver configuration (4bit or 8bit driver control)
+00045 #define LCD_4BIT                1
+00046 #define LCD_8BIT                0
+00047 
+00048 // STATIC helper functions
+00049 // ---------------------------------------------------------------------------
+00050 
+00051 
+00052 // CONSTRUCTORS
+00053 // ---------------------------------------------------------------------------
+00054 
+00055 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
+00056                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00057                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00058 {
+00059    init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00060 }
+00061 
+00062 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00063                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00064                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00065 {
+00066    init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00067 }
+00068 
+00069 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00070                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
+00071 {
+00072    init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00073 }
+00074 
+00075 LiquidCrystal::LiquidCrystal(uint8_t rs,  uint8_t enable,
+00076                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
+00077 {
+00078    init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00079 }
+00080 
+00081 // Contructors with backlight control
+00082 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
+00083                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00084                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00085                              uint8_t backlightPin, t_backlighPol pol)
+00086 {
+00087    init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00088    setBacklightPin ( backlightPin, pol );
+00089 }
+00090 
+00091 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00092                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00093                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00094                              uint8_t backlightPin, t_backlighPol pol)
+00095 {
+00096    init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00097    setBacklightPin ( backlightPin, pol );
+00098 }
+00099 
+00100 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00101                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00102                              uint8_t backlightPin, t_backlighPol pol)
+00103 {
+00104    init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00105    setBacklightPin ( backlightPin, pol );
+00106 }
+00107 
+00108 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
+00109                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00110                              uint8_t backlightPin, t_backlighPol pol)
+00111 {
+00112    init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00113    setBacklightPin ( backlightPin, pol );
+00114 }
+00115 
+00116 // PUBLIC METHODS
+00117 // ---------------------------------------------------------------------------
+00118 
+00119 /************ low level data pushing commands **********/
+00120 //
+00121 // send
+00122 void LiquidCrystal::send(uint8_t value, uint8_t mode) 
+00123 {
+00124    // Only interested in COMMAND or DATA
+00125    digitalWrite( _rs_pin, ( mode == DATA ) );
+00126    
+00127    // if there is a RW pin indicated, set it low to Write
+00128    // ---------------------------------------------------
+00129    if (_rw_pin != 255) 
+00130    { 
+00131       digitalWrite(_rw_pin, LOW);
+00132    }
+00133    
+00134    if ( mode != FOUR_BITS )
+00135    {   
+00136       if ( (_displayfunction & LCD_8BITMODE ) )
+00137       {
+00138          writeNbits(value, 8); 
+00139       } 
+00140       else 
+00141       {
+00142          writeNbits ( value >> 4, 4 );
+00143          writeNbits ( value, 4 );
+00144       }
+00145    } 
+00146    else 
+00147    {
+00148       writeNbits ( value, 4 );
+00149    }
+00150    waitUsec ( EXEC_TIME ); // wait for the command to execute by the LCD
+00151 }
+00152 
+00153 //
+00154 // setBacklightPin
+00155 void LiquidCrystal::setBacklightPin ( uint8_t pin, t_backlighPol pol )
+00156 {
+00157    pinMode ( pin, OUTPUT );       // Difine the backlight pin as output
+00158    _backlightPin = pin;
+00159    _polarity = pol;
+00160    setBacklight(BACKLIGHT_OFF);   // Set the backlight low by default
+00161 }
+00162 
+00163 //
+00164 // setBackligh
+00165 void LiquidCrystal::setBacklight ( uint8_t value )
+00166 {
+00167    // Check if there is a pin assigned to the backlight
+00168    // ---------------------------------------------------
+00169    if ( _backlightPin != LCD_NOBACKLIGHT )
+00170    {
+00171       // Check if the pin is associated to a timer, i.e. PWM
+00172       // ---------------------------------------------------
+00173       if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER)
+00174       {
+00175          // Check for control polarity inversion
+00176          // ---------------------------------------------------
+00177          if ( _polarity == POSITIVE )
+00178          {
+00179             analogWrite ( _backlightPin, value );
+00180          }
+00181          else 
+00182          {
+00183             analogWrite ( _backlightPin, 255 - value );
+00184          }
+00185       }
+00186       // Not a PWM pin, set the backlight pin for POSI or NEG
+00187       // polarity
+00188       // --------------------------------------------------------
+00189       else if (((value > 0) && (_polarity == POSITIVE)) ||
+00190                ((value == 0) && (_polarity == NEGATIVE)))
+00191       {
+00192          digitalWrite( _backlightPin, HIGH);
+00193       }
+00194       else
+00195       {
+00196          digitalWrite( _backlightPin, LOW);
+00197       }
+00198    }
+00199 }
+00200 
+00201 // PRIVATE METHODS
+00202 // ---------------------------------------------------------------------------
+00203 
+00204 
+00205 // init
+00206 void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
+00207                          uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00208                          uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00209 {
+00210    uint8_t i;
+00211    
+00212    // Initialize the IO pins
+00213    // -----------------------
+00214    
+00215    _rs_pin = rs;
+00216    _rw_pin = rw;
+00217    _enable_pin = enable;
+00218    
+00219    _data_pins[0] = d0;
+00220    _data_pins[1] = d1;
+00221    _data_pins[2] = d2;
+00222    _data_pins[3] = d3; 
+00223    _data_pins[4] = d4;
+00224    _data_pins[5] = d5;
+00225    _data_pins[6] = d6;
+00226    _data_pins[7] = d7;
+00227    
+00228    // Initialize the IO port direction to OUTPUT
+00229    // ------------------------------------------
+00230    
+00231    for ( i = 0; i < 4; i++ )
+00232    {
+00233       pinMode ( _data_pins[i], OUTPUT );
+00234    }
+00235    
+00236    // Initialize the rest of the ports if it is an 8bit controlled LCD
+00237    // ----------------------------------------------------------------
+00238    
+00239    if ( !fourbitmode )
+00240    {
+00241       for ( i = 4; i < 8; i++ )
+00242       {
+00243          pinMode ( _data_pins[i], OUTPUT );
+00244       }
+00245    }
+00246    pinMode(_rs_pin, OUTPUT);
+00247    
+00248    // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
+00249    if (_rw_pin != 255) 
+00250    { 
+00251       pinMode(_rw_pin, OUTPUT);
+00252    }
+00253    
+00254    pinMode(_enable_pin, OUTPUT);
+00255    
+00256    // Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS
+00257    // -------------------------------------------------------------------------
+00258    if (fourbitmode)
+00259       _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00260    else 
+00261       _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00262    
+00263    // Now we pull both RS and R/W low to begin commands
+00264    digitalWrite(_rs_pin, LOW);
+00265    digitalWrite(_enable_pin, LOW);
+00266    
+00267    if (_rw_pin != 255) 
+00268    { 
+00269       digitalWrite(_rw_pin, LOW);
+00270    }
+00271    
+00272    // Initialise the backlight pin no nothing
+00273    _backlightPin = LCD_NOBACKLIGHT;
+00274    _polarity = POSITIVE;
+00275 }
+00276 
+00277 //
+00278 // pulseEnable
+00279 void LiquidCrystal::pulseEnable(void) 
+00280 {
+00281    // There is no need for the delays, since the digitalWrite operation
+00282    // takes longer.
+00283    digitalWrite(_enable_pin, HIGH);   
+00284    waitUsec(1);          // enable pulse must be > 450ns   
+00285    digitalWrite(_enable_pin, LOW);
+00286 }
+00287 
+00288 //
+00289 // write4bits
+00290 void LiquidCrystal::writeNbits(uint8_t value, uint8_t numBits) 
+00291 {
+00292    for (uint8_t i = 0; i < numBits; i++) 
+00293    {
+00294       digitalWrite(_data_pins[i], (value >> i) & 0x01);
+00295    }
+00296    pulseEnable();
+00297 }
+00298 
+00299 
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal_8h.html b/LiquidCrystal/docs/html/_liquid_crystal_8h.html new file mode 100644 index 0000000..9a8ca65 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal_8h.html @@ -0,0 +1,117 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  LiquidCrystal

+Defines

#define EXEC_TIME   37
+

Define Documentation

+ +
+
+ + + + +
#define EXEC_TIME   37
+
+
+

Command execution time on the LCD. This defines how long a command takes to execute by the LCD. The time is expressed in micro-seconds.

+ +

Definition at line 42 of file LiquidCrystal.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html b/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html new file mode 100644 index 0000000..6df7f1e --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html @@ -0,0 +1,176 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using the parallel port of
+00021 // the LCD (4 bit and 8 bit).
+00022 //
+00023 //
+00024 //
+00025 // @author F. Malpartida - fmalpartida@gmail.com
+00026 // ---------------------------------------------------------------------------
+00027 #ifndef LiquidCrystal_4bit_h
+00028 #define LiquidCrystal_4bit_h
+00029 
+00030 #include <inttypes.h>
+00031 
+00032 #include "LCD.h"
+00033 #include "FastIO.h"
+00034 
+00035 
+00042 #define EXEC_TIME 37
+00043 
+00044 class LiquidCrystal : public LCD
+00045 {
+00046 public:
+00053    LiquidCrystal(uint8_t rs, uint8_t enable,
+00054                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00055                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00056    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00057                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00058                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00059    
+00060    // Constructors with backlight control
+00061    LiquidCrystal(uint8_t rs, uint8_t enable,
+00062                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00063                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00064                  uint8_t backlightPin, t_backlighPol pol);
+00065    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00066                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00067                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00068                  uint8_t backlightPin, t_backlighPol pol);   
+00075    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00076                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
+00077    LiquidCrystal(uint8_t rs, uint8_t enable,
+00078                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
+00079    
+00080    // Constructors with backlight control
+00081    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00082                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00083                  uint8_t backlightPin, t_backlighPol pol);
+00084    LiquidCrystal(uint8_t rs, uint8_t enable,
+00085                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00086                  uint8_t backlightPin, t_backlighPol pol);
+00099    virtual void send(uint8_t value, uint8_t mode);
+00100    
+00109    void setBacklightPin ( uint8_t pin, t_backlighPol pol );
+00110    
+00125    void setBacklight ( uint8_t value );
+00126    
+00127 private:
+00128    
+00134    void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
+00135              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00136              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00137    
+00144    void writeNbits(uint8_t value, uint8_t numBits);
+00145    
+00152    void pulseEnable();
+00153    
+00154    uint8_t _rs_pin;       // LOW: command.  HIGH: character.
+00155    uint8_t _rw_pin;       // LOW: write to LCD.  HIGH: read from LCD.
+00156    uint8_t _enable_pin;   // activated by a HIGH pulse.
+00157    uint8_t _data_pins[8]; // Data pins.
+00158    uint8_t _backlightPin; // Pin associated to control the LCD backlight
+00159 };
+00160 
+00161 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html new file mode 100644 index 0000000..8bc6c3b --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html @@ -0,0 +1,247 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp File Reference
+
+
+
#include <WProgram.h>
+#include <inttypes.h>
+#include "I2CIO.h"
+#include "LiquidCrystal_I2C.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Defines

#define D4   0
#define D5   1
#define D6   2
#define D7   3
#define EN   6
#define LCD_BACKLIGHT   0xFF
#define LCD_NOBACKLIGHT   0x00
#define RS   4
#define RW   5
+

Define Documentation

+ +
+
+ + + + +
#define D4   0
+
+
+

LCD dataline allocation this library only supports 4 bit LCD control mode. D4, D5, D6, D7 LCD data lines pin mapping of the extender module

+ +

Definition at line 88 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define D5   1
+
+
+ +

Definition at line 89 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define D6   2
+
+
+ +

Definition at line 90 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define D7   3
+
+
+ +

Definition at line 91 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define EN   6
+
+
+

Enable bit of the LCD Defines the IO of the expander connected to the LCD Enable

+ +

Definition at line 66 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_BACKLIGHT   0xFF
+
+
+

LCD_BACKLIGHT BACKLIGHT MASK used when backlight is on

+ +

Definition at line 55 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_NOBACKLIGHT   0x00
+
+
+

LCD_NOBACKLIGHT NO BACKLIGHT MASK

+ +

Definition at line 48 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define RS   4
+
+
+

Register bit of the LCD Defines the IO of the expander connected to the LCD Register select pin

+ +

Definition at line 80 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define RW   5
+
+
+

Read/Write bit of the LCD Defines the IO of the expander connected to the LCD Rw pin

+ +

Definition at line 73 of file LiquidCrystal_I2C.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html new file mode 100644 index 0000000..2820ddd --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html @@ -0,0 +1,344 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_I2C.c
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using an I2C IO extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
+00021 // backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC.
+00022 //
+00023 // The functionality provided by this class and its base class is identical
+00024 // to the original functionality of the Arduino LiquidCrystal library.
+00025 //
+00026 //
+00027 //
+00028 // @author F. Malpartida - fmalpartida@gmail.com
+00029 // ---------------------------------------------------------------------------
+00030 #if (ARDUINO <  100)
+00031 #include <WProgram.h>
+00032 #else
+00033 #include <Arduino.h>
+00034 #endif
+00035 #include <inttypes.h>
+00036 #include "I2CIO.h"
+00037 #include "LiquidCrystal_I2C.h"
+00038 
+00039 // CONSTANT  definitions
+00040 // ---------------------------------------------------------------------------
+00041 
+00042 // flags for backlight control
+00048 #define LCD_NOBACKLIGHT 0x00
+00049 
+00055 #define LCD_BACKLIGHT   0xFF
+00056 
+00057 
+00058 // Default library configuration parameters used by class constructor with
+00059 // only the I2C address field.
+00060 // ---------------------------------------------------------------------------
+00066 #define EN 6  // Enable bit
+00067 
+00073 #define RW 5  // Read/Write bit
+00074 
+00080 #define RS 4  // Register select bit
+00081 
+00088 #define D4 0
+00089 #define D5 1
+00090 #define D6 2
+00091 #define D7 3
+00092 
+00093 
+00094 // CONSTRUCTORS
+00095 // ---------------------------------------------------------------------------
+00096 LiquidCrystal_I2C::LiquidCrystal_I2C( uint8_t lcd_Addr )
+00097 {
+00098    config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7);
+00099 }
+00100 
+00101 
+00102 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, 
+00103                                      t_backlighPol pol = POSITIVE)
+00104 {
+00105    config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7);
+00106    setBacklightPin(backlighPin, pol);
+00107 }
+00108 
+00109 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00110                                      uint8_t Rs)
+00111 {
+00112    config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7);
+00113 }
+00114 
+00115 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00116                                      uint8_t Rs, uint8_t backlighPin, 
+00117                                      t_backlighPol pol = POSITIVE)
+00118 {
+00119    config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7);
+00120    setBacklightPin(backlighPin, pol);
+00121 }
+00122 
+00123 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00124                                      uint8_t Rs, uint8_t d4, uint8_t d5,
+00125                                      uint8_t d6, uint8_t d7 )
+00126 {
+00127    config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7);
+00128 }
+00129 
+00130 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00131                                      uint8_t Rs, uint8_t d4, uint8_t d5,
+00132                                      uint8_t d6, uint8_t d7, uint8_t backlighPin, 
+00133                                      t_backlighPol pol = POSITIVE )
+00134 {
+00135    config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7);
+00136    setBacklightPin(backlighPin, pol);
+00137 }
+00138 
+00139 // PUBLIC METHODS
+00140 // ---------------------------------------------------------------------------
+00141 
+00142 //
+00143 // begin
+00144 void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
+00145 {
+00146    
+00147    init();     // Initialise the I2C expander interface
+00148    LCD::begin ( cols, lines, dotsize );   
+00149 }
+00150 
+00151 
+00152 // User commands - users can expand this section
+00153 //----------------------------------------------------------------------------
+00154 // Turn the (optional) backlight off/on
+00155 
+00156 //
+00157 // setBacklightPin
+00158 void LiquidCrystal_I2C::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
+00159 {
+00160    _backlightPinMask = ( 1 << value );
+00161    _polarity = pol;
+00162    setBacklight(BACKLIGHT_OFF);
+00163 }
+00164 
+00165 //
+00166 // setBacklight
+00167 void LiquidCrystal_I2C::setBacklight( uint8_t value ) 
+00168 {
+00169    // Check if backlight is available
+00170    // ----------------------------------------------------
+00171    if ( _backlightPinMask != 0x0 )
+00172    {
+00173       // Check for polarity to configure mask accordingly
+00174       // ----------------------------------------------------------
+00175       if  (((_polarity == POSITIVE) && (value > 0)) || 
+00176            ((_polarity == NEGATIVE ) && ( value == 0 )))
+00177       {
+00178          _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
+00179       }
+00180       else 
+00181       {
+00182          _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
+00183       }
+00184       _i2cio.write( _backlightStsMask );
+00185    }
+00186 }
+00187 
+00188 
+00189 // PRIVATE METHODS
+00190 // ---------------------------------------------------------------------------
+00191 
+00192 //
+00193 // init
+00194 int LiquidCrystal_I2C::init()
+00195 {
+00196    int status = 0;
+00197    
+00198    // initialize the backpack IO expander
+00199    // and display functions.
+00200    // ------------------------------------------------------------------------
+00201    if ( _i2cio.begin ( _Addr ) == 1 )
+00202    {
+00203       _i2cio.portMode ( OUTPUT );  // Set the entire IO extender to OUTPUT
+00204       _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00205       status = 1;
+00206       _i2cio.write(0);  // Set the entire port to LOW
+00207    }
+00208    return ( status );
+00209 }
+00210 
+00211 //
+00212 // config
+00213 void LiquidCrystal_I2C::config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00214                                 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
+00215 {
+00216    _Addr = lcd_Addr;
+00217    
+00218    _backlightPinMask = 0;
+00219    _backlightStsMask = LCD_NOBACKLIGHT;
+00220    _polarity = POSITIVE;
+00221    
+00222    _En = ( 1 << En );
+00223    _Rw = ( 1 << Rw );
+00224    _Rs = ( 1 << Rs );
+00225    
+00226    // Initialise pin mapping
+00227    _data_pins[0] = ( 1 << d4 );
+00228    _data_pins[1] = ( 1 << d5 );
+00229    _data_pins[2] = ( 1 << d6 );
+00230    _data_pins[3] = ( 1 << d7 );   
+00231 }
+00232 
+00233 
+00234 
+00235 // low level data pushing commands
+00236 //----------------------------------------------------------------------------
+00237 
+00238 //
+00239 // send - write either command or data
+00240 void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) 
+00241 {
+00242    // No need to use the delay routines since the time taken to write takes
+00243    // longer that what is needed both for toggling and enable pin an to execute
+00244    // the command.
+00245    
+00246    if ( mode == FOUR_BITS )
+00247    {
+00248       write4bits( (value & 0x0F), COMMAND );
+00249    }
+00250    else 
+00251    {
+00252       write4bits( (value >> 4), mode );
+00253       write4bits( (value & 0x0F), mode);
+00254    }
+00255 }
+00256 
+00257 //
+00258 // write4bits
+00259 void LiquidCrystal_I2C::write4bits ( uint8_t value, uint8_t mode ) 
+00260 {
+00261    uint8_t pinMapValue = 0;
+00262    
+00263    // Map the value to LCD pin mapping
+00264    // --------------------------------
+00265    for ( uint8_t i = 0; i < 4; i++ )
+00266    {
+00267       if ( ( value & 0x1 ) == 1 )
+00268       {
+00269          pinMapValue |= _data_pins[i];
+00270       }
+00271       value = ( value >> 1 );
+00272    }
+00273    
+00274    // Is it a command or data
+00275    // -----------------------
+00276    if ( mode == DATA )
+00277    {
+00278       mode = _Rs;
+00279    }
+00280    
+00281    pinMapValue |= mode | _backlightStsMask;
+00282    pulseEnable ( pinMapValue );
+00283 }
+00284 
+00285 //
+00286 // pulseEnable
+00287 void LiquidCrystal_I2C::pulseEnable (uint8_t data)
+00288 {
+00289    _i2cio.write (data | _En);   // En HIGH
+00290    _i2cio.write (data & ~_En);  // En LOW
+00291 }
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html new file mode 100644 index 0000000..1f2fd5f --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html @@ -0,0 +1,97 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h File Reference
+
+
+
#include <inttypes.h>
+#include <Print.h>
+#include "I2CIO.h"
+#include "LCD.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  LiquidCrystal_I2C
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html new file mode 100644 index 0000000..2b32412 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html @@ -0,0 +1,172 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_I2C.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using an I2C IO extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
+00021 // backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC.
+00022 //
+00023 // The functionality provided by this class and its base class is identical
+00024 // to the original functionality of the Arduino LiquidCrystal library.
+00025 //
+00026 //
+00027 // @author F. Malpartida - fmalpartida@gmail.com
+00028 // ---------------------------------------------------------------------------
+00029 #ifndef LiquidCrystal_I2C_h
+00030 #define LiquidCrystal_I2C_h
+00031 #include <inttypes.h>
+00032 #include <Print.h>
+00033 
+00034 #include "I2CIO.h"
+00035 #include "LCD.h"
+00036 
+00037 
+00038 class LiquidCrystal_I2C : public LCD 
+00039 {
+00040 public:
+00041    
+00051    LiquidCrystal_I2C (uint8_t lcd_Addr);
+00052    // Constructor with backlight control
+00053    LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
+00054    
+00067    LiquidCrystal_I2C( uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs);
+00068    // Constructor with backlight control
+00069    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs,
+00070                      uint8_t backlighPin, t_backlighPol pol);   
+00071    
+00088    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00089                      uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
+00090    // Constructor with backlight control
+00091    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00092                      uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00093                      uint8_t backlighPin, t_backlighPol pol);
+00110    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);   
+00111    
+00124    virtual void send(uint8_t value, uint8_t mode);
+00125    
+00134    void setBacklightPin ( uint8_t value, t_backlighPol pol );
+00135    
+00145    void setBacklight ( uint8_t value );
+00146    
+00147 private:
+00148    
+00154    int  init();
+00155    
+00171    void config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00172                 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
+00173    
+00182    void write4bits(uint8_t value, uint8_t mode);
+00183    
+00190    void pulseEnable(uint8_t);
+00191    
+00192    
+00193    uint8_t _Addr;             // I2C Address of the IO expander
+00194    uint8_t _backlightPinMask; // Backlight IO pin mask
+00195    uint8_t _backlightStsMask; // Backlight status mask
+00196    I2CIO   _i2cio;            // I2CIO PCF8574* expansion module driver I2CLCDextraIO
+00197    uint8_t _En;               // LCD expander word for enable pin
+00198    uint8_t _Rw;               // LCD expander word for R/W pin
+00199    uint8_t _Rs;               // LCD expander word for Register Select pin
+00200    uint8_t _data_pins[4];     // LCD data lines
+00201    
+00202 };
+00203 
+00204 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html new file mode 100644 index 0000000..a89c8e7 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html @@ -0,0 +1,89 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp File Reference
+
+ + + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html new file mode 100644 index 0000000..3af3164 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html @@ -0,0 +1,219 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created/Adapted by Bill Perry 2012-03-16
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR2W.cpp
+00013 // Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit 
+00014 // ShiftRegister (SR2W from now on).
+00015 // 
+00016 // @brief 
+00017 // This is a port of the ShiftRegLCD library from raron and ported to the
+00018 // LCD library.
+00019 //
+00020 //
+00021 // See the corresponding SR2W header file for full details.
+00022 //
+00023 // History
+00024 // 2012.03.29  bperrybap - Fixed incorrect use of 5x10 for default font 
+00025 //                         (now matches original LQ library)
+00026 //                         Fixed typo in SR2W mask define names
+00027 //                         changed default backlight state to on
+00028 // 2012.03.16  bperrybap - created/modified from SR sources to create SR2W
+00029 // @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com
+00030 // ---------------------------------------------------------------------------
+00031 
+00032 #include "LiquidCrystal_SR2W.h"
+00033 
+00034 // CONSTRUCTORS
+00035 // ---------------------------------------------------------------------------
+00036 // Assuming 1 line 8 pixel high font
+00037 LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol)
+00038 {
+00039         init ( srdata, srclock, blpol, 1, 0 );
+00040 }
+00041 
+00042 
+00043 // PRIVATE METHODS
+00044 // ---------------------------------------------------------------------------
+00045 
+00046 //
+00047 // init
+00048 void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font)
+00049 {
+00050         _srDataRegister = fio_pinToOutputRegister(srdata);
+00051         _srDataMask = fio_pinToBit(srdata);
+00052         _srClockRegister = fio_pinToOutputRegister(srclock);
+00053         _srClockMask = fio_pinToBit(srclock);
+00054    
+00055         _blPolarity = blpol;
+00056    
+00057         _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00058    
+00059         backlight(); // set default backlight state to on
+00060 }
+00061 
+00062 //
+00063 // loadSR
+00064 void LiquidCrystal_SR2W::loadSR(uint8_t val)
+00065 {
+00066         // Clear to keep Enable LOW while clocking in new bits
+00067         fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask);
+00068    
+00069    
+00070         // clock out SR data byte
+00071         fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask, val, MSBFIRST);
+00072    
+00073         
+00074         // strobe LCD enable which can now be toggled by the data line
+00075         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00076         {
+00077                 fio_digitalWrite_HIGH(_srDataRegister, _srDataMask);
+00078                 waitUsec (1);         // enable pulse must be >450ns               
+00079                 fio_digitalWrite_SWITCHTO(_srDataRegister, _srDataMask, LOW);
+00080         } // end critical section
+00081 }
+00082 
+00083 // PUBLIC METHODS
+00084 // ---------------------------------------------------------------------------
+00085 
+00086 
+00087 /************ low level data pushing commands **********/
+00088 //
+00089 // send
+00090 void LiquidCrystal_SR2W::send(uint8_t value, uint8_t mode)
+00091 {
+00092         uint8_t myMode = ( mode == DATA ) ? SR2W_RS_MASK : 0; 
+00093    
+00094         myMode = myMode | SR2W_EN_MASK | _blMask;
+00095 
+00096         if ( mode != FOUR_BITS )
+00097         {
+00098                 loadSR(myMode | ((value >> 1) & SR2W_DATA_MASK)); // upper nibble
+00099         }
+00100 
+00101         loadSR(myMode | ((value << 3) & SR2W_DATA_MASK)); // lower nibble
+00102    
+00103         /*
+00104          * Don't call waitUsec()
+00105          * do our own delay optmization since this code is so fast it needs some added delay
+00106          * even on slower AVRs.
+00107          */
+00108 #if (F_CPU <= 16000000)
+00109         delayMicroseconds ( 10 );      // commands & data writes need > 37us to complete
+00110 #else
+00111         delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
+00112 #endif
+00113 }
+00114 
+00115 //
+00116 // setBacklight
+00117 void LiquidCrystal_SR2W::setBacklight ( uint8_t value ) 
+00118 { 
+00119         // Check for polarity to configure mask accordingly
+00120         // ----------------------------------------------------------
+00121         if  ( ((_blPolarity == POSITIVE) && (value > 0)) || 
+00122         ((_blPolarity == NEGATIVE ) && ( value == 0 )) )
+00123         {
+00124                 _blMask = SR2W_BL_MASK;
+00125         }
+00126         else 
+00127         {
+00128                 _blMask = 0;
+00129         }
+00130    
+00131         // send dummy data of blMask to set BL pin
+00132         // Note: loadSR() will strobe the data line trying to pulse EN
+00133         // but E will not strobe because the EN output bit is not set.
+00134         loadSR(_blMask); 
+00135 }
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html new file mode 100644 index 0000000..8cf84b8 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html @@ -0,0 +1,164 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  LiquidCrystal_SR2W

+Defines

#define SR2W_BL_MASK   0x02
#define SR2W_DATA_MASK   0x78
#define SR2W_EN_MASK   0x80
#define SR2W_RS_MASK   0x04
+

Define Documentation

+ +
+
+ + + + +
#define SR2W_BL_MASK   0x02
+
+
+ +

Definition at line 132 of file LiquidCrystal_SR2W.h.

+ +
+
+ +
+
+ + + + +
#define SR2W_DATA_MASK   0x78
+
+
+ +

Definition at line 134 of file LiquidCrystal_SR2W.h.

+ +
+
+ +
+
+ + + + +
#define SR2W_EN_MASK   0x80
+
+
+ +

Definition at line 135 of file LiquidCrystal_SR2W.h.

+ +
+
+ +
+
+ + + + +
#define SR2W_RS_MASK   0x04
+
+
+ +

Definition at line 133 of file LiquidCrystal_SR2W.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html new file mode 100644 index 0000000..eb5efcc --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html @@ -0,0 +1,245 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created/Adapted by Bill Perry 2012-03-16
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // @file LiquidCrystal_SR2W.h
+00010 // Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit 
+00011 // ShiftRegister (SR2W from now on).
+00012 // 
+00013 // @brief 
+00014 // This is the 2 wire shift register interface class for the LCD library
+00015 //
+00016 // The functionality provided by this class and its base class is a superset of
+00017 // the original functionality of the Arduino LiquidCrystal library and can
+00018 // be used as such.
+00019 // See the LCD class for a full description of the API functions available.
+00020 //
+00021 // It works with a 8-bit unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
+00022 // shift register (IE a very simple SR), and an hd44780 LCD in 4-bit mode.
+00023 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
+00024 // 74LS164 and 74HC595 have been exstensively tested.
+00025 //
+00026 //
+00027 // 2 Pins required from the Arduino:
+00028 // - Data/Enable
+00029 // - Clock
+00030 // The Data pin is also used to control the enable signal
+00031 // LCD RW-pin hardwired to LOW (only writing to LCD).
+00032 // Busy Flag (BF, data bit D7) is not read.
+00033 //
+00034 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
+00035 //
+00036 // Shift register bits
+00037 // Bit  #0   - (cannot be used on 74HC595)
+00038 // Bit  #1   - optional backlight control
+00039 // Bit  #2   - connects to RS (Register Select) on the LCD
+00040 // Bit  #3   - connects to LCD data inputs D4
+00041 // Bit  #4   - connects to LCD data inputs D5
+00042 // Bit  #5   - connects to LCD data inputs D6
+00043 // Bit  #6   - connects to LCD data inputs D7
+00044 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
+00045 // 
+00046 // Wiring for a 74LS164
+00047 // ---------------------
+00048 //                          1k/4.7k
+00049 //              +--------[ Resistor ]--------+---(LCD Enable)
+00050 //              |                            |
+00051 //              |          74LS164    (VCC)  |
+00052 //              |        +----u----+    |   _V_ diode
+00053 // (data pin)---+---+--1-|A     VCC|-14-+    |
+00054 //                  |    |         |         |
+00055 //                  +--2-|B      Q7|-13------+
+00056 //                     3-|Q0     Q6|-12--(LCD D7)
+00057 // (BL Circuit)--------4-|Q1     Q5|-11--(LCD D6)
+00058 // (LCD RS)------------5-|Q2     Q4|-10--(LCD D5)
+00059 // (LCD D4)------------6-|Q3    /MR|--9--(VCC)
+00060 //                   +-7-|GND    CP|--8--(clock pin)
+00061 //                   |   +---------+ 
+00062 //                   |      0.1uf
+00063 //                 (gnd)-----||----(vcc)
+00064 // 
+00065 // Wiring for a 74HC595
+00066 // --------------------
+00067 // NOTE: the 74HC595 is a latching shift register. In order to get it to operate
+00068 // in a "non latching" mode, RCLK and SCLK are tied together. The side effect of this
+00069 // is that the latched output is one clock behind behind the internal shift register bits.
+00070 // To compensate for this the wiring is offset by one bit position lower.
+00071 // For example, while the backlight is hooked to Q0 it is still using bit 1 of
+00072 // of the shift register because the outputs are 1 clock behind the real internal shift
+00073 // register.
+00074 // 
+00075 //                         74HC595    (VCC)
+00076 //                       +----u----+    |  +-----------------------(BL circuit)
+00077 // (LCD RS)------------1-|Q1    VCC|-16-+  |  +--------------------(data pin)
+00078 // (LCD D4)------------2-|Q2     Q0|-15----+  |      1k/4.7k
+00079 // (LCD D5)------------3-|Q3    SER|-14-------+---[ Resistor ]--+--(LCD Enable)
+00080 // (LCD D6)------------4-|Q4    /OE|-13--(gnd)                  |
+00081 // (LCD D7)------------5-|Q5   RCLK|-12-------+                 |
+00082 //                       |         |          |                 |
+00083 //              +------6-|Q6   SCLK|-11-------+--(clock pin)    |
+00084 //              |      7-|Q7    /MR|-10--(VCC)                  |
+00085 //              |    +-8-|GND   Q6'|--9                         |
+00086 //              |    |   +---------+                    diode  _V_
+00087 //              |    |      0.1uf                               |
+00088 //              |  (gnd)-----||----(vcc)                        |
+00089 //              +-----------------------------------------------+
+00090 // 
+00091 //
+00092 // Backlight Control circuit
+00093 // -------------------------
+00094 // Because the shift resiter is not latching the outputs, the backlight circuitry
+00095 // will "see" the output bits as they are shifted into the shift register which
+00096 // can cause the backlight to flicker rather than remain constantly on/off.
+00097 // The circuit below slows down the transitions to the transistor to remove
+00098 // the visible flicker. When the BL input is HIGH the LCD backlight will turn on.
+00099 //
+00100 //                (value depends on LCD, 100ohm is usually safe)
+00101 // (LCD BL anode)---[ resistor ]---(vcc)
+00102 //
+00103 // (LCD BL cathode)-------------------------------+
+00104 //                                                |
+00105 //                                                D
+00106 //                                                |
+00107 // (BL input)----[ 4.7k Resistor ]----+-------G-|-<  (2N7000 FET)
+00108 //                                    |           |
+00109 //                          (0.1uf)   =           S
+00110 //                                    |           |
+00111 //                                  (gnd)        (gnd)
+00112 // 
+00113 // 
+00114 // 
+00115 //
+00116 // History
+00117 // 2012.03.16  bperrybap - creation/adaption from SR header to create SR2W header.
+00118 //                         Fixed typo in SR2W mask define names
+00119 // @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com
+00120 // --------------------------------------------------------------------------------
+00121 #ifndef _LIQUIDCRYSTAL_SR2W_
+00122 #define _LIQUIDCRYSTAL_SR2W_
+00123 
+00124 #include <inttypes.h>
+00125 #include "LCD.h"
+00126 #include "FastIO.h"
+00127 
+00128 
+00129 // two-wire SR output bit constants
+00130 // ---------------------------------------------------------------------------
+00131 
+00132 #define SR2W_BL_MASK 0x02
+00133 #define SR2W_RS_MASK 0x04
+00134 #define SR2W_DATA_MASK 0x78     // data bits are hard coded to be SR bits 6,5,4,3
+00135 #define SR2W_EN_MASK 0x80       // cannot ever be changed
+00136 
+00137 class LiquidCrystal_SR2W : public LCD
+00138 {
+00139 public:
+00151    LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol = POSITIVE);
+00152    
+00165    virtual void send(uint8_t value, uint8_t mode);
+00166    
+00167    
+00177    void setBacklight ( uint8_t mode );
+00178    
+00179 private:
+00180    
+00186    void init ( uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font );
+00187    
+00192    void loadSR (uint8_t val);
+00193    
+00194    fio_register _srDataRegister; // Serial Data pin
+00195    fio_bit _srDataMask;
+00196    fio_register _srClockRegister; // Clock Pin
+00197    fio_bit _srClockMask;
+00198 
+00199    uint8_t _blPolarity;
+00200    uint8_t _blMask;
+00201 };
+00202 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html new file mode 100644 index 0000000..fad12ed --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html @@ -0,0 +1,249 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LiquidCrystal_SR3W.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Defines

#define D4   0
#define D5   1
#define D6   2
#define D7   3
#define EN   4
#define LCD_BACKLIGHT   0xFF
#define LCD_NOBACKLIGHT   0x00
#define RS   6
#define RW   5
+

Define Documentation

+ +
+
+ + + + +
#define D4   0
+
+
+

LCD dataline allocation this library only supports 4 bit LCD control mode. D4, D5, D6, D7 LCD data lines pin mapping of the extender module

+ +

Definition at line 126 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define D5   1
+
+
+ +

Definition at line 127 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define D6   2
+
+
+ +

Definition at line 128 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define D7   3
+
+
+ +

Definition at line 129 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define EN   4
+
+
+

Enable bit of the LCD Defines the IO of the expander connected to the LCD's Enable

+ +

Definition at line 104 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_BACKLIGHT   0xFF
+
+
+

LCD_BACKLIGHT BACKLIGHT MASK used when backlight is on

+ +

Definition at line 93 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_NOBACKLIGHT   0x00
+
+
+

LCD_NOBACKLIGHT No BACKLIGHT MASK

+ +

Definition at line 86 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define RS   6
+
+
+

Register bit of the LCD Defines the IO of the expander connected to the LCD's Register select pin

+ +

Definition at line 118 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define RW   5
+
+
+

Read/Write bit of the LCD Defines the IO of the expander connected to the LCD's Rw pin

+ +

Definition at line 111 of file LiquidCrystal_SR3W.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html new file mode 100644 index 0000000..535571c --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html @@ -0,0 +1,336 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 7.3.2012.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SRG.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
+00021 // shift register. While it has been tested with a 74HC595N shift register
+00022 // it should also work with other latching shift registers such as the MC14094
+00023 // and the HEF4094
+00024 //
+00025 // This particular driver has been created as generic as possible to enable
+00026 // users to configure and connect their LCDs using just 3 digital IOs from the
+00027 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
+00028 // in any configuration. The library is configured by passing the IO pins
+00029 // that control the strobe, data and clock of the shift register and a map
+00030 // of how the shiftregister is connected to the LCD.
+00031 // 
+00032 //
+00033 //   +--------------------------------------------+
+00034 //   |                 MCU                        |
+00035 //   |   IO1           IO2           IO3          |
+00036 //   +----+-------------+-------------+-----------+
+00037 //        |             |             |
+00038 //        |             |             |
+00039 //   +----+-------------+-------------+-----------+
+00040 //   |    Strobe        Data          Clock       |
+00041 //   |          8-bit shift/latch register        | 74HC595N
+00042 //   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
+00043 //   +----+----+----+----+----+----+----+----+----+
+00044 //        |    |    |    |    |    |    |    
+00045 //        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
+00046 //   +----+----+----+----+----+----+----+----+----+
+00047 //   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
+00048 //   |                 LCD Module                 |
+00049 //
+00050 // NOTE: Rw is not used by the driver so it can be connected to GND.
+00051 //
+00052 // The functionality provided by this class and its base class is identical
+00053 // to the original functionality of the Arduino LiquidCrystal library.
+00054 //
+00055 //
+00056 // History
+00057 // 2012.03.29 bperrybap - fixed constructors not properly using Rs
+00058 //                        Fixed incorrect use of 5x10 for default font 
+00059 //                        - now matches original LQ library.
+00060 //                        moved delay to send() so it is per cmd/write vs shiftout()
+00061 //                        NOTE: delay is on hairy edge of working when FAST_MODE is on.
+00062 //                        because of waitUsec().
+00063 //                        There is margin at 16Mhz AVR but might fail on 20Mhz AVRs.
+00064 //                        
+00065 // @author F. Malpartida - fmalpartida@gmail.com
+00066 // ---------------------------------------------------------------------------
+00067 // flags for backlight control
+00068 #include <stdio.h>
+00069 #include <string.h>
+00070 #include <inttypes.h>
+00071 
+00072 #if (ARDUINO <  100)
+00073 #include <WProgram.h>
+00074 #else
+00075 #include <Arduino.h>
+00076 #endif
+00077 #include "LiquidCrystal_SR3W.h"
+00078 
+00079 #include "FastIO.h"
+00080 
+00086 #define LCD_NOBACKLIGHT 0x00
+00087 
+00093 #define LCD_BACKLIGHT   0xFF
+00094 
+00095 
+00096 // Default library configuration parameters used by class constructor with
+00097 // only the I2C address field.
+00098 // ---------------------------------------------------------------------------
+00104 #define EN 4  // Enable bit
+00105 
+00111 #define RW 5  // Read/Write bit
+00112 
+00118 #define RS 6  // Register select bit
+00119 
+00126 #define D4 0
+00127 #define D5 1
+00128 #define D6 2
+00129 #define D7 3
+00130 
+00131 
+00132 
+00133 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)
+00134 {
+00135    init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
+00136 }
+00137 
+00138 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
+00139                                        uint8_t backlighPin, t_backlighPol pol)
+00140 {
+00141    init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
+00142    setBacklightPin(backlighPin, pol);
+00143 }
+00144 
+00145 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
+00146                                        uint8_t En, uint8_t Rw, uint8_t Rs, 
+00147                                        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
+00148 {
+00149    init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
+00150 }
+00151 
+00152 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
+00153                                        uint8_t En, uint8_t Rw, uint8_t Rs, 
+00154                                        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00155                                        uint8_t backlighPin, t_backlighPol pol)
+00156 {
+00157    init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
+00158    setBacklightPin(backlighPin, pol);
+00159 }
+00160 
+00161 
+00162 void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode)
+00163 {
+00164    
+00165    if ( mode != FOUR_BITS )
+00166    {
+00167       write4bits( (value >> 4), mode ); // upper nibble
+00168    }   
+00169    write4bits( (value & 0x0F), mode); // lower nibble
+00170 
+00171 
+00172 #if (F_CPU <= 16000000)
+00173    // No need to use the delay routines on AVR since the time taken to write
+00174    // on AVR with SR pin mapping even with fio is longer than LCD command execution.
+00175    waitUsec(37); //goes away on AVRs
+00176 #else
+00177    delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
+00178 #endif
+00179 
+00180 }
+00181 
+00182 
+00183 void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
+00184 {
+00185    _backlightPinMask = ( 1 << value );
+00186    _backlightStsMask = LCD_NOBACKLIGHT;
+00187    _polarity = pol;
+00188    setBacklight (BACKLIGHT_OFF);     // Set backlight to off as initial setup
+00189 }
+00190 
+00191 void LiquidCrystal_SR3W::setBacklight ( uint8_t value )
+00192 {
+00193    // Check if backlight is available
+00194    // ----------------------------------------------------
+00195    if ( _backlightPinMask != 0x0 )
+00196    {
+00197       // Check for polarity to configure mask accordingly
+00198       // ----------------------------------------------------------
+00199       if  (((_polarity == POSITIVE) && (value > 0)) || 
+00200            ((_polarity == NEGATIVE ) && ( value == 0 )))
+00201       {
+00202          _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
+00203       }
+00204       else 
+00205       {
+00206          _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
+00207       }
+00208       loadSR( _backlightStsMask );
+00209    }
+00210 }
+00211 
+00212 
+00213 // PRIVATE METHODS
+00214 // -----------------------------------------------------------------------------
+00215 
+00216 int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe, 
+00217                              uint8_t Rs, uint8_t Rw, uint8_t En,
+00218                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00219 {
+00220    _data       = fio_pinToBit(data);
+00221    _clk        = fio_pinToBit(clk);
+00222    _strobe     = fio_pinToBit(strobe);
+00223    _data_reg   = fio_pinToOutputRegister(data);
+00224    _clk_reg    = fio_pinToOutputRegister(clk);
+00225    _strobe_reg = fio_pinToOutputRegister(strobe);
+00226    
+00227    // LCD pin mapping
+00228    _backlightPinMask = 0;
+00229    _backlightStsMask = LCD_NOBACKLIGHT;
+00230    _polarity = POSITIVE;
+00231    
+00232    _En = ( 1 << En );
+00233    _Rw = ( 1 << Rw );
+00234    _Rs = ( 1 << Rs );
+00235    
+00236    // Initialise pin mapping
+00237    _data_pins[0] = ( 1 << d4 );
+00238    _data_pins[1] = ( 1 << d5 );
+00239    _data_pins[2] = ( 1 << d6 );
+00240    _data_pins[3] = ( 1 << d7 );
+00241    
+00242    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00243    
+00244    return (1);
+00245 }
+00246 
+00247 void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode)
+00248 {
+00249    uint8_t pinMapValue = 0;
+00250    
+00251    // Map the value to LCD pin mapping
+00252    // --------------------------------
+00253    for ( uint8_t i = 0; i < 4; i++ )
+00254    {
+00255       if ( ( value & 0x1 ) == 1 )
+00256       {
+00257          pinMapValue |= _data_pins[i];
+00258       }
+00259       value = ( value >> 1 );
+00260    }
+00261    
+00262    // Is it a command or data
+00263    // -----------------------
+00264    mode = ( mode == DATA ) ? _Rs : 0;
+00265    
+00266    pinMapValue |= mode | _backlightStsMask;
+00267    loadSR ( pinMapValue | _En );  // Send with enable high
+00268    loadSR ( pinMapValue); // Send with enable low
+00269 }
+00270 
+00271 
+00272 void LiquidCrystal_SR3W::loadSR(uint8_t value) 
+00273 {
+00274    // Load the shift register with information
+00275    fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST);
+00276    
+00277    // Strobe the data into the latch
+00278    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00279    {
+00280       fio_digitalWrite_HIGH(_strobe_reg, _strobe);
+00281       fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW);
+00282    }
+00283 }
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html new file mode 100644 index 0000000..2a5f588 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html @@ -0,0 +1,96 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  LiquidCrystal_SR3W
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html new file mode 100644 index 0000000..5f3dbed --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html @@ -0,0 +1,201 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 7.3.2012.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR3W.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
+00021 // shift register. While it has been tested with a 74HC595N shift register
+00022 // it should also work with other latching shift registers such as the MC14094
+00023 // and the HEF4094
+00024 //
+00025 // This particular driver has been created as generic as possible to enable
+00026 // users to configure and connect their LCDs using just 3 digital IOs from the
+00027 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
+00028 // in any configuration. The library is configured by passing the IO pins
+00029 // that control the strobe, data and clock of the shift register and a map
+00030 // of how the shiftregister is connected to the LCD.
+00031 // 
+00032 //
+00033 //   +--------------------------------------------+
+00034 //   |                 MCU                        |
+00035 //   |   IO1           IO2           IO3          |
+00036 //   +----+-------------+-------------+-----------+
+00037 //        |             |             |
+00038 //        |             |             |
+00039 //   +----+-------------+-------------+-----------+
+00040 //   |    Strobe        Data          Clock       |
+00041 //   |          8-bit shift/latch register        | 74HC595N
+00042 //   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
+00043 //   +----+----+----+----+----+----+----+----+----+
+00044 //        |    |    |    |    |    |    |    
+00045 //        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
+00046 //   +----+----+----+----+----+----+----+----+----+
+00047 //   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
+00048 //   |                 LCD Module                 |
+00049 //
+00050 // NOTE: Rw is not used by the driver so it can be connected to GND.
+00051 //
+00052 // The functionality provided by this class and its base class is identical
+00053 // to the original functionality of the Arduino LiquidCrystal library.
+00054 //
+00055 //
+00056 // @author F. Malpartida - fmalpartida@gmail.com
+00057 // ---------------------------------------------------------------------------
+00058 #ifndef _LIQUIDCRYSTAL_SR3W_H_
+00059 #define _LIQUIDCRYSTAL_SR3W_H_
+00060 
+00061 #include <inttypes.h>
+00062 #include "LCD.h"
+00063 #include "FastIO.h"
+00064 
+00065 
+00066 class LiquidCrystal_SR3W : public LCD 
+00067 {
+00068 public:
+00069    
+00090    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe);
+00091    // Constructor with backlight control
+00092    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
+00093                       uint8_t backlighPin, t_backlighPol pol);   
+00094    
+00112    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
+00113                       uint8_t En, uint8_t Rw, uint8_t Rs, 
+00114                       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
+00115    // Constructor with backlight control
+00116    LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe,
+00117                       uint8_t En, uint8_t Rw, uint8_t Rs, 
+00118                       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00119                       uint8_t backlighPin, t_backlighPol pol);
+00120    
+00133    virtual void send(uint8_t value, uint8_t mode);
+00134    
+00143    void setBacklightPin ( uint8_t value, t_backlighPol pol );
+00144    
+00154    void setBacklight ( uint8_t value );
+00155    
+00156 private:
+00157    
+00163    int  init(uint8_t data, uint8_t clk, uint8_t strobe, 
+00164              uint8_t Rs, uint8_t Rw, uint8_t En,
+00165              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00166    
+00175    void write4bits(uint8_t value, uint8_t mode);
+00176    
+00183    void loadSR(uint8_t value);
+00184    
+00185    
+00186    fio_bit      _strobe;           // shift register strobe pin
+00187    fio_register _strobe_reg;       // SR strobe pin MCU register
+00188    fio_bit      _data;             // shift register data pin
+00189    fio_register _data_reg;         // SR data pin MCU register
+00190    fio_bit      _clk;              // shift register clock pin
+00191    fio_register _clk_reg;          // SR clock pin MCU register
+00192    uint8_t      _En;               // LCD expander word for enable pin
+00193    uint8_t      _Rw;               // LCD expander word for R/W pin
+00194    uint8_t      _Rs;               // LCD expander word for Register Select pin
+00195    uint8_t      _data_pins[4];     // LCD data lines
+00196    uint8_t      _backlightPinMask; // Backlight IO pin mask
+00197    uint8_t      _backlightStsMask; // Backlight status mask
+00198    
+00199 };
+00200 
+00201 #endif
+00202 
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html new file mode 100644 index 0000000..8eb1854 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html @@ -0,0 +1,94 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LiquidCrystal_SR.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html new file mode 100644 index 0000000..9a78cc1 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html @@ -0,0 +1,293 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR.h
+00013 //  Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit 
+00014 // ShiftRegister (SR from now on).
+00015 // 
+00016 // @brief 
+00017 // This is a port of the ShiftRegLCD library from raron and ported to the
+00018 // LCD library.
+00019 //
+00020 // The functionality provided by this class and its base class is identical
+00021 // to the original functionality of the Arduino LiquidCrystal library and can
+00022 // be used as such.
+00023 //
+00024 // Modified to work serially with the shiftOut() function, an 8-bit
+00025 // unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
+00026 // shift register (IE a very simple SR), and an LCD in 4-bit mode.
+00027 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
+00028 // I used 74LS164, for the reason that's what I had at hand.
+00029 //
+00030 // Connection description:
+00031 //
+00032 // SR output:
+00033 // Bit  #0   - N/C - not connected, used to hold a zero
+00034 // Bit  #1   - N/C
+00035 // Bit  #2   - connects to RS (Register Select) on the LCD
+00036 // Bits #3-6 - connects to LCD data inputs D4 - D7.
+00037 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
+00038 //
+00039 // 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
+00040 // If not using Enable, the Data pin is used for the enable signal by defining
+00041 // the same pin for Enable as for Data. Data and Clock outputs/pins goes to
+00042 // the shiftregister.
+00043 // LCD RW-pin hardwired to LOW (only writing to LCD).
+00044 // Busy Flag (BF, data bit D7) is not read.
+00045 //
+00046 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
+00047 //
+00048 //
+00049 // History
+00050 // 2012.03.29  bperrybap - Added delays for faster fio shiftout (it got too fast)
+00051 //             AVR needed delay. cmd/write delays are based on CPU speed so it works on pic32.
+00052 //             Added code to support indicating two wire mode by using enable=data pin
+00053 //             (documentation indicated this as working)
+00054 //             Fixed incorrect use of 5x10 for default font - now matches original LQ library.
+00055 //             can now eliminate enable pin in constructor for two wire mode.
+00056 // 2012.01.16  Florian Fida - faster digitalWrite/shiftOut
+00057 // 2011.10.29  fmalpartida - adaption of the library to the LCD class hierarchy.
+00058 // 2011.07.02  Fixed a minor flaw in setCursor function. No functional change, 
+00059 //             just a bit more memory efficient.
+00060 //             Thanks to CapnBry (from google code and github) who noticed it.
+00061 //             URL to his version of shiftregLCD:
+00062 //             https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1
+00063 // 2009.07.30  raron - minor corrections to the comments.
+00064 //             Fixed timing to datasheet safe. Fixed keyword highlights.
+00065 // 2009.07.28  Mircho / raron - a new modification to the schematics, and a
+00066 //             more streamlined interface
+00067 // 2009.07.27  Thanks to an excellent suggestion from mircho at the Arduino
+00068 //             playgrond forum, the number of wires now required is only two!
+00069 // 2009.07.25  raron - Fixed comments. I really messed up the comments before 
+00070 //             posting this, so I had to fix it.
+00071 //             Renamed a function, but no improvements or functional changes.
+00072 // 2009.07.23  Incorporated some proper initialization routines
+00073 //             inspired (lets say copy-paste-tweaked) from LiquidCrystal
+00074 //             library improvements from LadyAda.
+00075 // 2009.05.23  raron - first version, but based mostly (as in almost verbatim)
+00076 //             on the "official" LiquidCrystal library.
+00077 //
+00078 //
+00079 // @author F. Malpartida - fmalpartida@gmail.com
+00080 // ---------------------------------------------------------------------------
+00081 #include <stdio.h>
+00082 #include <string.h>
+00083 #include <inttypes.h>
+00084 
+00085 #if (ARDUINO <  100)
+00086 #include <WProgram.h>
+00087 #else
+00088 #include <Arduino.h>
+00089 #endif
+00090 #include "LiquidCrystal_SR.h"
+00091 
+00092 #include "FastIO.h"
+00093 
+00094 
+00095 // CONSTRUCTORS
+00096 // ---------------------------------------------------------------------------
+00097 // Assuming 1 line 8 pixel high font
+00098 LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, 
+00099                                     uint8_t enable ) 
+00100 {
+00101         init ( srdata, srclock, enable, 1, 0 );
+00102 }
+00103 
+00104 
+00105 // PRIVATE METHODS
+00106 // ---------------------------------------------------------------------------
+00107 
+00108 //
+00109 // init
+00110 void LiquidCrystal_SR::init(uint8_t srdata, uint8_t srclock, uint8_t enable, 
+00111                             uint8_t lines, uint8_t font)
+00112 {
+00113    // Initialise private variables
+00114    _two_wire = 0;
+00115    
+00116    _srDataRegister = fio_pinToOutputRegister(srdata);
+00117    _srDataBit = fio_pinToBit(srdata);
+00118    _srClockRegister = fio_pinToOutputRegister(srclock);
+00119    _srClockBit = fio_pinToBit(srclock);
+00120    
+00121    if ((enable == TWO_WIRE) || (enable == srdata))
+00122    {
+00123       _two_wire = 1;
+00124       _srEnableRegister = _srDataRegister;
+00125       _srEnableBit = _srDataBit;
+00126    }
+00127    else
+00128    {
+00129       _srEnableRegister = fio_pinToOutputRegister(enable);
+00130       _srEnableBit = fio_pinToBit(enable);
+00131    }
+00132    
+00133    // Configure control pins as outputs
+00134    // ------------------------------------------------------------------------
+00135    
+00136    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00137 }
+00138 
+00139 //
+00140 // shiftIt
+00141 void LiquidCrystal_SR::shiftIt(uint8_t val)
+00142 {
+00143    if (_two_wire)
+00144    {
+00145       // Clear to get Enable LOW
+00146       fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit);
+00147    }
+00148    fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit, val, MSBFIRST);
+00149    
+00150    // LCD ENABLE PULSE
+00151    //
+00152    // While this library is written with a shift register without an output
+00153    // latch in mind, it can work in 3-wire mode with a shiftregister with a
+00154    // latch. The shiftregister latch pin (STR, RCL or similar) is then
+00155    // connected to the LCD enable pin. The LCD is (very likely) slower
+00156    // to read the Enable pulse, and then reads the new contents of the SR.
+00157    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00158    {
+00159       fio_digitalWrite_HIGH(_srEnableRegister, _srEnableBit);
+00160       waitUsec (1);         // enable pulse must be >450ns               
+00161       fio_digitalWrite_SWITCHTO(_srEnableRegister, _srEnableBit, LOW);
+00162    } // end critical section
+00163 }
+00164 
+00165 // PUBLIC METHODS
+00166 // ---------------------------------------------------------------------------
+00167 
+00168 
+00169 /************ low level data pushing commands **********/
+00170 //
+00171 // send
+00172 void LiquidCrystal_SR::send(uint8_t value, uint8_t mode)
+00173 {
+00174    // Divide byte in two nibbles include the RS signal
+00175    // and format it for shiftregister output wiring to the LCD
+00176    // We are only interested in my COMMAND or DATA for myMode
+00177    uint8_t myMode = ( mode == DATA ) ? SR_RS_BIT : 0; // RS bit; LOW: command.  HIGH: character.
+00178    
+00179    if ( mode != FOUR_BITS )
+00180    {
+00181       shiftIt(myMode | SR_EN_BIT | ((value >> 1) & 0x78)); // upper nibble
+00182    }
+00183 
+00184    shiftIt(myMode | SR_EN_BIT | ((value << 3) & 0x78)); // lower nibble
+00185    /*
+00186     * Add some delay since this code is so fast it needs some added delay
+00187     * even on AVRs because the shiftout is shorter than the LCD command execution time.
+00188     */
+00189 #if (F_CPU <= 16000000)
+00190    if(_two_wire)
+00191         delayMicroseconds ( 10 );
+00192    else
+00193         delayMicroseconds ( 17 ); // 3 wire mode is faster so it must delay longer
+00194 #else
+00195    delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
+00196 #endif
+00197 
+00198 }
+00199 
+00200 //
+00201 // setBacklightPin
+00202 void LiquidCrystal_SR::setBacklightPin ( uint8_t pin, t_backlighPol pol )
+00203 { }
+00204 
+00205 //
+00206 // setBacklight
+00207 void LiquidCrystal_SR::setBacklight ( uint8_t mode ) 
+00208 { }
+00209 
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html new file mode 100644 index 0000000..5e7f2d7 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html @@ -0,0 +1,148 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + +

+Classes

class  LiquidCrystal_SR

+Defines

#define SR_EN_BIT   0x80
#define SR_RS_BIT   0x04
#define TWO_WIRE   204
+

Define Documentation

+ +
+
+ + + + +
#define SR_EN_BIT   0x80
+
+
+ +

Definition at line 92 of file LiquidCrystal_SR.h.

+ +
+
+ +
+
+ + + + +
#define SR_RS_BIT   0x04
+
+
+ +

Definition at line 91 of file LiquidCrystal_SR.h.

+ +
+
+ +
+
+ + + + +
#define TWO_WIRE   204
+
+
+ +

Definition at line 90 of file LiquidCrystal_SR.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html new file mode 100644 index 0000000..71640bf --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html @@ -0,0 +1,210 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR.h
+00013 //  Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit 
+00014 // ShiftRegister (SR from now on).
+00015 // 
+00016 // @brief 
+00017 // This is a port of the ShiftRegLCD library from raron and ported to the
+00018 // LCD library.
+00019 //
+00020 // The functionality provided by this class and its base class is identical
+00021 // to the original functionality of the Arduino LiquidCrystal library and can
+00022 // be used as such.
+00023 //
+00024 // Modified to work serially with the shiftOut() function, an 8-bit
+00025 // unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
+00026 // shift register (IE a very simple SR), and an LCD in 4-bit mode.
+00027 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
+00028 // I used 74LS164, for the reason that's what I had at hand.
+00029 //
+00030 // Connection description:
+00031 //
+00032 // SR output:
+00033 // Bit  #0   - N/C - not connected, used to hold a zero
+00034 // Bit  #1   - N/C
+00035 // Bit  #2   - connects to RS (Register Select) on the LCD
+00036 // Bits #3-6 - connects to LCD data inputs D4 - D7.
+00037 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
+00038 //
+00039 // 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
+00040 // If not using Enable, the Data pin will be used for the enable signal.
+00041 // 2 wire mode can be indicated by:
+00042 // - ommitting the enable pin in constructor
+00043 // - defining the same pin for Enable as for Data in constructor
+00044 // - by using the token TWO_WIRE for the enable pin.
+00045 //
+00046 // Data and Clock outputs/pins goes to the shiftregister.
+00047 // LCD RW-pin hardwired to LOW (only writing to LCD).
+00048 // Busy Flag (BF, data bit D7) is not read.
+00049 //
+00050 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
+00051 //
+00052 //
+00053 // History
+00054 // 2012.03.29  bperrybap - can now eliminate enable pin in constructor for two wire mode.
+00055 // 2011.10.29  fmalpartida - adaption of the library to the LCD class hierarchy.
+00056 // 2011.07.02  Fixed a minor flaw in setCursor function. No functional change, 
+00057 //             just a bit more memory efficient.
+00058 //             Thanks to CapnBry (from google code and github) who noticed it.
+00059 //             URL to his version of shiftregLCD:
+00060 //             https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1
+00061 // 2009.07.30  raron - minor corrections to the comments.
+00062 //             Fixed timing to datasheet safe. Fixed keyword highlights.
+00063 // 2009.07.28  Mircho / raron - a new modification to the schematics, and a
+00064 //             more streamlined interface
+00065 // 2009.07.27  Thanks to an excellent suggestion from mircho at the Arduiono 
+00066 //             playgrond forum, the number of wires now required is only two!
+00067 // 2009.07.25  raron - Fixed comments. I really messed up the comments before 
+00068 //             posting this, so I had to fix it.
+00069 //             Renamed a function, but no improvements or functional changes.
+00070 // 2009.07.23  Incorporated some proper initialization routines
+00071 //             inspired (lets say copy-paste-tweaked) from LiquidCrystal
+00072 //             library improvements from LadyAda.
+00073 // 2009.05.23  raron - first version, but based mostly (as in almost verbatim)
+00074 //             on the "official" LiquidCrystal library.
+00075 //
+00076 //
+00077 //
+00078 // @author F. Malpartida - fmalpartida@gmail.com
+00079 // ---------------------------------------------------------------------------
+00080 #ifndef _LIQUIDCRYSTAL_SR_
+00081 #define _LIQUIDCRYSTAL_SR_
+00082 
+00083 #include <inttypes.h>
+00084 #include "LCD.h"
+00085 #include "FastIO.h"
+00086 
+00087 
+00088 // two-wire indicator constant
+00089 // ---------------------------------------------------------------------------
+00090 #define TWO_WIRE  204
+00091 #define SR_RS_BIT 0x04
+00092 #define SR_EN_BIT 0x80
+00093 
+00094 class LiquidCrystal_SR : public LCD
+00095 {
+00096 public:
+00108    LiquidCrystal_SR ( uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE );
+00109    
+00122    virtual void send(uint8_t value, uint8_t mode);
+00123    
+00124    
+00134    void setBacklightPin ( uint8_t pin, t_backlighPol pol );
+00135    
+00145    void setBacklight ( uint8_t mode );
+00146    
+00147 private:
+00148    
+00154    void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, 
+00155               uint8_t font );
+00156    
+00161    void shiftIt (uint8_t val);
+00162    
+00163    uint8_t _enable_pin;  // Enable Pin
+00164    uint8_t _two_wire;    // two wire mode
+00165    
+00166    fio_register _srDataRegister; // Serial Data pin
+00167    fio_bit _srDataBit;
+00168    fio_register _srClockRegister; // Clock Pin
+00169    fio_bit _srClockBit;
+00170    fio_register _srEnableRegister; // Enable Pin
+00171    fio_bit _srEnableBit;
+00172    
+00173 };
+00174 
+00175 #endif
+00176 
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html new file mode 100644 index 0000000..8049852 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html @@ -0,0 +1,147 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "FastIO.h"
+#include "LiquidCrystal_SR_LCD3.h"
+
+

Go to the source code of this file.

+ + + + + +

+Defines

#define SR_EN_BIT   B00010000
#define SR_RS_BIT   B01000000
#define SR_RW_BIT   B00100000
+

Define Documentation

+ +
+
+ + + + +
#define SR_EN_BIT   B00010000
+
+
+ +

Definition at line 167 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+ +
+
+ + + + +
#define SR_RS_BIT   B01000000
+
+
+ +

Definition at line 169 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+ +
+
+ + + + +
#define SR_RW_BIT   B00100000
+
+
+ +

Definition at line 168 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html new file mode 100644 index 0000000..310997e --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html @@ -0,0 +1,295 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Originally Created by Francisco Malpartida on 2011/08/20.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // 2012/01/21 - Marc MERLIN
+00010 // This library, LiquidCrystal_SR_LCD3, was forked off LiquidCrystal_SR which
+00011 // used a different wiring than the Pebble and Pebblev2 (just released by
+00012 // freetronics in the arduino miniconf as part of linux.conf.au 2012) and
+00013 // therefore this code organizes the output data differently.
+00014 //
+00015 // Upstream source for this module is
+00016 // https://github.com/marcmerlin/NewLiquidCrystal
+00017 //
+00018 // Thread Safe: No
+00019 // Extendable: Yes
+00020 //
+00021 // @file LiquidCrystal_SR_LCD3.h
+00022 //
+00023 //  Connects an LCD using 3 pins from the Arduino, via an 8-bit 
+00024 //  ShiftRegister (SR from now on).
+00025 //  The original port source for this module is https://github.com/marcmerlin/NewLiquidCrystal
+00026 //  The 'FastIO' merge has madethis code 4 times faster.
+00027 // 
+00028 // @brief 
+00029 // This is a port of the ShiftRegLCD library from raron and ported to the
+00030 // LCD library.
+00031 //
+00032 // The functionality provided by this class and its base class is identical
+00033 // to the original functionality of the Arduino LiquidCrystal library and can
+00034 // be used as such.
+00035 //
+00036 // Pinout for this code is used by derivatives of the original LCD3Wire page:
+00037 // http://www.arduino.cc/playground/Code/LCD3wires
+00038 //
+00039 // This includes the LCA (linux.conf.au) Arduino Miniconf Pebble: 
+00040 // http://shieldlist.org/luke-weston/pebble
+00041 // https://github.com/lukeweston/Pebble
+00042 //
+00043 // It also includes the Pebble v2:
+00044 // http://www.arduinominiconf.org/index.php/Pebble_V2.0_Instructions
+00045 // http://www.freetronics.com/pages/pebble-v2
+00046 // https://github.com/lukeweston/pebble20/blob/master/README.md
+00047 // https://github.com/lukeweston/pebble20/blob/master/pebble-sch.pdf
+00048 //
+00049 // Shiftregister connection description:
+00050 // MC14094 input:  Arduino digital pin 2=Clock, pin 3=Data, pin 4=Strobe
+00051 // MC14094 output: Q8=DB4, Q7=DB5, Q6=DB6, Q5=DB7, Q4=E, Q3=RW, Q2=RS, Q1=None
+00052 //
+00053 //   +--------------------------------------------+
+00054 //   |    Arduino (ATMega 168 or 328)             |
+00055 //   |    D02           D03           D04         |
+00056 //   +----+-------------+-------------+-----------+
+00057 //        |4            |5            |6
+00058 //        |1            |2            |3
+00059 //   +----+-------------+-------------+-----------+
+00060 //   |    Strobe        Data          Clock       |
+00061 //   |    MC14094 8-bit shift/latch register      |
+00062 //   |    Q8   Q7   Q6   Q5   Q4   Q3   Q2   Q1   |
+00063 //   +----+----+----+----+----+----+----+----+----+
+00064 //        |11  |12  |13  |14  |7   |6   |5   |4
+00065 //        |11  |12  |13  |14  |6   |5   |4
+00066 //   +----+----+----+----+----+----+----+---------+
+00067 //   |    DB4  DB5  DB6  DB7  E    RW   RS        |
+00068 //   |               LCD KS0066                   |
+00069 //   +--------------------------------------------+
+00070 //
+00071 // 3 Pins required from the Arduino for Data, Clock, and Enable/Strobe.
+00072 //
+00073 // This code was inspired from LiquidCrystal_SR from
+00074 // http://code.google.com/p/arduinoshiftreglcd/
+00075 // but was written for implementing LiquidCrystal support for the Pebble
+00076 // and Pebblev2 (see below).
+00077 // The Pebbles's LCD and shift register wiring were inspired from this
+00078 // original page:
+00079 // http://www.arduino.cc/playground/Code/LCD3wires
+00080 // 
+00081 // Pebbles and the LCD3Wires design are compatible hardware-wise, but
+00082 // the LCD3Wire code does not work with arduino 1.0 anymore and is generally
+00083 // quite limited in functionality compared to this framework that provides the
+00084 // entire LiquidDisplay functionality.
+00085 // Why not just use the LiquidCrystal_SR pinout?
+00086 // - LCD3Wire was first and therefore have hardware that was designed with 
+00087 //   incompatible (IMO better if you don't mind 3 wires) pinout.
+00088 // - The pinout used here is same saner (the 4 bits for the LCD are all in one 
+00089 //   nibble of the shift register, not spread across 2 like in the
+00090 //   LiquidCrystal_SR pinout)
+00091 //
+00092 // Note however that LiquidCrystal_SR while a bit more complex wiring and code
+00093 // wise, supports non latching shift registers and it a few percent faster than
+00094 // this code since it can address the LCD enable pin without having to send 
+00095 // a pulse through the shift register like the LCD3Wires setup requires.
+00096 //  
+00097 // This code makes sure to properly follow the specifications when talking
+00098 // to the LCD while using minimal delays (it's faster than the LCD3wire and aiko
+00099 // pebble code).
+00100 //
+00101 // @author Marc MERLIN - marc_soft<at>merlins.org.
+00102 // ---------------------------------------------------------------------------
+00103 #include <stdio.h>
+00104 #include <string.h>
+00105 #include <inttypes.h>
+00106 
+00107 #if (ARDUINO <  100)
+00108 #include <WProgram.h>
+00109 #else
+00110 #include <Arduino.h>
+00111 #endif
+00112 #include "FastIO.h"
+00113 #include "LiquidCrystal_SR_LCD3.h"
+00114 
+00115 
+00116 // STATIC helper functions
+00117 // ---------------------------------------------------------------------------
+00118 
+00119 
+00120 // CONSTRUCTORS
+00121 // ---------------------------------------------------------------------------
+00122 // Assuming 1 line 8 pixel high font
+00123 LiquidCrystal_SR_LCD3::LiquidCrystal_SR_LCD3 ( uint8_t srdata, uint8_t srclock, 
+00124                                               uint8_t strobe )
+00125 {
+00126         init ( srdata, srclock, strobe, 1, 0 );
+00127 }
+00128 
+00129 
+00130 // PRIVATE METHODS
+00131 // ---------------------------------------------------------------------------
+00132 
+00133 //
+00134 // init
+00135 void LiquidCrystal_SR_LCD3::init( uint8_t srdata, uint8_t srclock, uint8_t strobe, 
+00136                                  uint8_t lines, uint8_t font )
+00137 {
+00138         // Initialise private variables
+00139         // translate all pins to bits and registers
+00140         // pinMode to OUTPUT, Output LOW
+00141    
+00142    _srdata_bit = fio_pinToBit(srdata);
+00143    _srdata_register = fio_pinToOutputRegister(srdata);
+00144    _srclock_bit = fio_pinToBit(srclock);
+00145    _srclock_register = fio_pinToOutputRegister(srclock);
+00146    _strobe_bit = fio_pinToBit(strobe);
+00147    _strobe_register = fio_pinToOutputRegister(strobe);
+00148    
+00149    // Little trick to force a pulse of the LCD enable bit and make sure it is
+00150    // low before we start further writes since this is assumed.
+00151    
+00152    write4bits(0);
+00153    
+00154    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x10DOTS;
+00155 }
+00156 
+00157 // PUBLIC METHODS
+00158 // ---------------------------------------------------------------------------
+00159 
+00160 
+00161 /************ low level data pushing commands **********/
+00162 
+00163 // Code below was borrowed from LCD3Wire from
+00164 // http://www.arduino.cc/playground/Code/LCD3wires
+00165 
+00166 // bitmasks for control bits on shift register
+00167 #define SR_EN_BIT B00010000   // LCD Data enable bit.
+00168 #define SR_RW_BIT B00100000   // RW can be pinned low since we only send
+00169 #define SR_RS_BIT B01000000   // LOW: command. HIGH: character.
+00170 
+00171 void LiquidCrystal_SR_LCD3::send(uint8_t value, uint8_t mode) 
+00172 {
+00173    uint8_t nibble;
+00174    
+00175    mode = mode ? SR_RS_BIT : 0; // RS bit; LOW: command.  HIGH: character.
+00176    
+00177    nibble = value >> 4; // Get high nibble.
+00178    write4bits(nibble | mode);
+00179    
+00180    //delay(1); // This was in the LCD3 code but does not seem needed -- merlin
+00181    
+00182    nibble = value & 15; // Get low nibble
+00183    write4bits(nibble | mode);
+00184 }
+00185 
+00186 void LiquidCrystal_SR_LCD3::write4bits(uint8_t nibble) 
+00187 {
+00188    nibble &= ~SR_RW_BIT; // set RW LOW (we do this always since we only write).
+00189    
+00190    // Send a High transition to display the data that was pushed
+00191    nibble |=  SR_EN_BIT; // LCD Data Enable HIGH
+00192    _pushOut(nibble);
+00193    nibble &= ~SR_EN_BIT; // LCD Data Enable LOW
+00194    _pushOut(nibble); 
+00195 }
+00196 
+00197 // push byte to shift register and on to LCD
+00198 void LiquidCrystal_SR_LCD3::_pushOut(uint8_t nibble) 
+00199 {
+00200    // Make data available for pushing to the LCD.
+00201    fio_shiftOut(_srdata_register, _srdata_bit, _srclock_register, _srclock_bit, nibble, LSBFIRST);
+00202    
+00203    // Make new data active.
+00204    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00205    {
+00206       fio_digitalWrite_HIGH(_strobe_register, _strobe_bit);
+00207       waitUsec( 1 ); // strobe pulse must be >450ns (old code had 10ms)
+00208       fio_digitalWrite_SWITCHTO(_strobe_register, _strobe_bit,LOW);
+00209    }
+00210    waitUsec( 40 ); // commands need > 37us to settle
+00211 }
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html new file mode 100644 index 0000000..1b75e74 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html @@ -0,0 +1,95 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  LiquidCrystal_SR_LCD3
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html new file mode 100644 index 0000000..9888666 --- /dev/null +++ b/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html @@ -0,0 +1,129 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This module is a port by Marc MERLIN <marc_soft<at>merlins.org>
+00007 // See .cpp file for hardware details.
+00008 // ---------------------------------------------------------------------------
+00009 #ifndef _LIQUIDCRYSTAL_SR_LCD3_
+00010 #define _LIQUIDCRYSTAL_SR_LCD3_
+00011 
+00012 #include <inttypes.h>
+00013 #include "LCD.h"
+00014 
+00015 
+00016 class LiquidCrystal_SR_LCD3 : public LCD
+00017 {
+00018 public:
+00030    LiquidCrystal_SR_LCD3 ( uint8_t srdata, uint8_t srclock, uint8_t enable );
+00031    
+00044    virtual void send(uint8_t value, uint8_t mode);
+00045    
+00046    
+00047 private:
+00048    
+00054    void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, 
+00055               uint8_t font );
+00061    void write4bits ( uint8_t );
+00062    void _pushOut ( uint8_t );
+00063    
+00064    // Serial Data pin
+00065    fio_bit _srdata_bit;
+00066    fio_register _srdata_register;
+00067    
+00068    // Clock Pin
+00069    fio_bit _srclock_bit;
+00070    fio_register _srclock_register;
+00071    
+00072    // Enable Pin
+00073    fio_bit _strobe_bit;
+00074    fio_register _strobe_register;
+00075 };
+00076 
+00077 #endif
+00078 
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/annotated.html b/LiquidCrystal/docs/html/annotated.html new file mode 100644 index 0000000..4fab574 --- /dev/null +++ b/LiquidCrystal/docs/html/annotated.html @@ -0,0 +1,95 @@ + + + + +LCD Library: Class List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + +
I2CIO
LCD
LiquidCrystal
LiquidCrystal_I2C
LiquidCrystal_SR
LiquidCrystal_SR2W
LiquidCrystal_SR3W
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/bc_s.png b/LiquidCrystal/docs/html/bc_s.png new file mode 100644 index 0000000..e401862 Binary files /dev/null and b/LiquidCrystal/docs/html/bc_s.png differ diff --git a/LiquidCrystal/docs/html/class_i2_c_i_o-members.html b/LiquidCrystal/docs/html/class_i2_c_i_o-members.html new file mode 100644 index 0000000..01d0efd --- /dev/null +++ b/LiquidCrystal/docs/html/class_i2_c_i_o-members.html @@ -0,0 +1,95 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
I2CIO Member List
+
+
+This is the complete list of members for I2CIO, including all inherited members. + + + + + + + + +
begin(uint8_t i2cAddr)I2CIO
digitalRead(uint8_t pin)I2CIO
digitalWrite(uint8_t pin, uint8_t level)I2CIO
I2CIO()I2CIO
pinMode(uint8_t pin, uint8_t dir)I2CIO
portMode(uint8_t dir)I2CIO
read(void)I2CIO
write(uint8_t value)I2CIO
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_i2_c_i_o.html b/LiquidCrystal/docs/html/class_i2_c_i_o.html new file mode 100644 index 0000000..bee1a49 --- /dev/null +++ b/LiquidCrystal/docs/html/class_i2_c_i_o.html @@ -0,0 +1,339 @@ + + + + +LCD Library: I2CIO Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
I2CIO Class Reference
+
+
+ +

#include <I2CIO.h>

+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

int begin (uint8_t i2cAddr)
uint8_t digitalRead (uint8_t pin)
int digitalWrite (uint8_t pin, uint8_t level)
 I2CIO ()
void pinMode (uint8_t pin, uint8_t dir)
void portMode (uint8_t dir)
uint8_t read (void)
int write (uint8_t value)
+

Detailed Description

+
+

Definition at line 41 of file I2CIO.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
I2CIO::I2CIO ()
+
+
+

Constructor method Class constructor constructor.

+ +

Definition at line 44 of file I2CIO.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
int I2CIO::begin (uint8_t i2cAddr)
+
+
+

Initializes the device. This method initializes the device allocating an I2C address. This method is the first method that should be call prior to calling any other method form this class. On initialization all pins are configured as INPUT on the device.

+
Parameters:
+ + +
i2cAddr,:I2C Address where the device is located.
+
+
+
Returns:
1 if the device was initialized correctly, 0 otherwise
+ +

Definition at line 57 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
uint8_t I2CIO::digitalRead (uint8_t pin)
+
+
+

Read a pin from the device. Reads a particular pin from the device. To read a particular pin it has to be configured as INPUT. During initialization all pins are configured as INPUTs by default. Please refer to pinMode or portMode.

+
Parameters:
+ + +
pin[in]Pin from the port to read its status. Range (0..7)
+
+
+
Returns:
Returns the pin status (HIGH, LOW) if the pin is configured as an output, reading its value will always return LOW regardless of its real state.
+ +

Definition at line 153 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int I2CIO::digitalWrite (uint8_t pin,
uint8_t level 
)
+
+
+

Writes a digital level to a particular pin. Write a level to the indicated pin of the device. For this method to have effect, the pin has to be configured as OUTPUT using the pinMode or portMode methods.

+
Parameters:
+ + +
pin[in]device pin to change level. Range (0..7). level[in] logic level to set the pin at (HIGH, LOW).
+
+
+
Returns:
1 on success, 0 otherwise.
+ +

Definition at line 170 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void I2CIO::pinMode (uint8_t pin,
uint8_t dir 
)
+
+
+

Sets the mode of a particular pin. Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite has no effect on pins which are not declared as output.

+
Parameters:
+ + + +
pin[in]Pin from the I2C IO expander to be configured. Range 0..7
dir[in]Pin direction (INPUT, OUTPUT).
+
+
+ +

Definition at line 76 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void I2CIO::portMode (uint8_t dir)
+
+
+

Sets all the pins of the device in a particular direction. This method sets all the pins of the device in a particular direction. This method is useful to set all the pins of the device to be either inputs or outputs.

+
Parameters:
+ + +
dir[in]Direction of all the pins of the device (INPUT, OUTPUT).
+
+
+ +

Definition at line 93 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
uint8_t I2CIO::read (void )
+
+
+

Reads all the pins of the device that are configured as INPUT. Reads from the device the status of the pins that are configured as INPUT. During initialization all pins are configured as INPUTs by default. Please refer to pinMode or portMode.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 111 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
int I2CIO::write (uint8_t value)
+
+
+

Write a value to the device. Writes to a set of pins in the device. The value is the binary representation of all the pins in device. The value written is masked with the configuration of the direction of the pins; to change the state of a particular pin with this method, such pin has to be configured as OUTPUT using the portMode or pinMode methods. If no pins have been configured as OUTPUTs this method will have no effect.

+
Parameters:
+ + +
value[in]value to be written to the device.
+
+
+
Returns:
1 on success, 0 otherwise
+ +

Definition at line 130 of file I2CIO.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_l_c_d-members.html b/LiquidCrystal/docs/html/class_l_c_d-members.html new file mode 100644 index 0000000..95c0aa6 --- /dev/null +++ b/LiquidCrystal/docs/html/class_l_c_d-members.html @@ -0,0 +1,120 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LCD Member List
+
+
+This is the complete list of members for LCD, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
setBacklight(uint8_t value)LCD [inline, virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_l_c_d.html b/LiquidCrystal/docs/html/class_l_c_d.html new file mode 100644 index 0000000..a63437a --- /dev/null +++ b/LiquidCrystal/docs/html/class_l_c_d.html @@ -0,0 +1,982 @@ + + + + +LCD Library: LCD Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LCD Class Reference
+
+
+ +

#include <LCD.h>

+
+Inheritance diagram for LCD:
+
+
+ + +LiquidCrystal +LiquidCrystal_I2C +LiquidCrystal_SR +LiquidCrystal_SR2W +LiquidCrystal_SR3W + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void autoscroll ()
void backlight (void)
virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
void blink ()
void clear ()
void createChar (uint8_t location, uint8_t charmap[])
void cursor ()
void display ()
void home ()
 LCD ()
void leftToRight ()
void moveCursorLeft ()
void moveCursorRight ()
void noAutoscroll ()
void noBacklight (void)
void noBlink ()
void noCursor ()
void noDisplay ()
void off (void)
void on (void)
void rightToLeft ()
void scrollDisplayLeft ()
void scrollDisplayRight ()
virtual void setBacklight (uint8_t value)
virtual void setBacklightPin (uint8_t value, t_backlighPol pol)
void setCursor (uint8_t col, uint8_t row)
virtual void write (uint8_t value)

+Protected Attributes

uint8_t _cols
uint8_t _displaycontrol
uint8_t _displayfunction
uint8_t _displaymode
uint8_t _numlines
t_backlighPol _polarity
+

Detailed Description

+
+

Definition at line 169 of file LCD.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
LCD::LCD ()
+
+
+

LiquidCrystal abstract constructor. LiquidCrystal class abstract constructor needed to create the base abstract class.

+ +

Definition at line 49 of file LCD.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void LCD::autoscroll (void )
+
+
+

Turns on automatic scrolling of the LCD. Turns on automatic scrolling of the LCD. This causes each character output to the display to push previous characters over by one space. If the current text direction is left-to-right (the default), the display scrolls to the left; if the current direction is right-to-left, the display scrolls to the right. This has the effect of outputting each new character to the same location on the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 271 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::backlight (void )
+
+
+

Switch-on the LCD backlight. Switch-on the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+ +

Definition at line 301 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void LCD::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
+
+
+

LCD initialization. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class.

+

This method is abstract, a base implementation is available common to all LCD drivers. Should it not be compatible with some other LCD driver, a derived implementation should be done on the driver specif class.

+
Parameters:
+ + + + +
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]character size, default==LCD_5x8DOTS
+
+
+ +

Reimplemented in LiquidCrystal_I2C.

+ +

Definition at line 76 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::blink ()
+
+
+

Display the cursor of the LCD. Display the blinking LCD cursor. If used in combination with the cursor() function, the result will depend on the particular display.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 226 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::clear ()
+
+
+

Clears the LCD. Clears the LCD screen and positions the cursor in the upper-left corner.

+

This operation is time consuming for the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 159 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LCD::createChar (uint8_t location,
uint8_t charmap[] 
)
+
+
+

Creates a custom character for use on the LCD. Create a custom character (glyph) for use on the LCD. Most chipsets only support up to eight characters of 5x8 pixels. Therefore, this methods has been limited to locations (numbered 0 to 7).

+

The appearance of each custom character is specified by an array of eight bytes, one for each row. The five least significant bits of each byte determine the pixels in that row. To display a custom character on screen, write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7.

+
Parameters:
+ + + +
location[in]LCD memory location of the character to create (0 to 7)
charmap[in]the bitmap array representing each row of the character.
+
+
+ +

Definition at line 285 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::cursor ()
+
+
+

Display the LCD cursor. Display the LCD cursor: an underscore (line) at the location where the next character will be written.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 213 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::display ()
+
+
+

Turns on the LCD display. Turns on the LCD display, after it's been turned off with noDisplay(). This will restore the text (and cursor location) that was on the display prior to calling noDisplay().

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 201 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::home ()
+
+
+

Sets the cursor to the upper-left corner. Positions the cursor in the upper-left of the LCD. That is, use that location in outputting subsequent text to the display. To also clear the display, use the clear() function instead.

+

This operation is time consuming for the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 165 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::leftToRight (void )
+
+
+

Set the direction for text written to the LCD to left-to-right. Set the direction for text written to the LCD to left-to-right. All subsequent characters written to the display will go from left to right, but does not affect previously-output text.

+

This is the default configuration.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 244 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::moveCursorLeft (void )
+
+
+

Moves the cursor one space to the left.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 264 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::moveCursorRight (void )
+
+
+

Moves the cursor one space to the right.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 258 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::noAutoscroll (void )
+
+
+

Turns off automatic scrolling of the LCD. Turns off automatic scrolling of the LCD, this is the default configuration of the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 278 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::noBacklight (void )
+
+
+

Switch-off the LCD backlight. Switch-off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+ +

Definition at line 308 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::noBlink ()
+
+
+

Turns off the blinking of the LCD cursor.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 220 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::noCursor ()
+
+
+

Hides the LCD cursor.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 208 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::noDisplay ()
+
+
+

Turns off the LCD display. Turns off the LCD display, without losing the text currently being displayed on it.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 195 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::off (void )
+
+
+

Switch off the LCD module. Switch off the LCD module, it will switch off the LCD controller and the backlight. This method has the same effect of calling noDisplay and noBacklight.

+
See also:
display,
+
+backlight
+ +

Definition at line 323 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::on (void )
+
+
+

Switch on the LCD module. Switch on the LCD module, it will switch on the LCD controller and the backlight. This method has the same effect of calling display and backlight.

+
See also:
display,
+
+backlight
+ +

Definition at line 315 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::rightToLeft (void )
+
+
+

Set the direction for text written to the LCD to right-to-left. Set the direction for text written to the LCD to right-to-left. All subsequent characters written to the display will go from right to left, but does not affect previously-output text.

+

left-to-right is the default configuration.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 251 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::scrollDisplayLeft (void )
+
+
+

Scrolls the contents of the display (text and cursor) one space to the left.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 233 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::scrollDisplayRight (void )
+
+
+

Scrolls the contents of the display (text and cursor) one space to the right.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 238 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
virtual void LCD::setBacklight (uint8_t value) [inline, virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. The behaviour of this method is very dependent on the device. Some controllers support dimming some don't. Please read the actual header file for each individual device. The setBacklightPin method has to be called before setting the backlight or the adequate backlight control constructor.

+
See also:
setBacklightPin.
+

NOTE: The prefered methods to control the backlight are "backlight" and "noBacklight".

+
Parameters:
+ + +
0..255- the value is very dependent on the LCD. However, BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the backlight on.
+
+
+ +

Reimplemented in LiquidCrystal, LiquidCrystal_I2C, LiquidCrystal_SR, LiquidCrystal_SR2W, and LiquidCrystal_SR3W.

+ +

Definition at line 463 of file LCD.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
virtual void LCD::setBacklightPin (uint8_t value,
t_backlighPol pol 
) [inline, virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This method is device dependent and can be programmed on each subclass. An empty function call is provided that does nothing.

+
Parameters:
+ + + +
value,:pin associated to backlight control.
pol,:backlight polarity control (POSITIVE, NEGATIVE)
+
+
+ +

Reimplemented in LiquidCrystal, LiquidCrystal_I2C, LiquidCrystal_SR, and LiquidCrystal_SR3W.

+ +

Definition at line 444 of file LCD.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LCD::setCursor (uint8_t col,
uint8_t row 
)
+
+
+

Position the LCD cursor. Sets the position of the LCD cursor. Set the location at which subsequent text written to the LCD will be displayed.

+
Parameters:
+ + + +
col[in]LCD column
row[in]LCD row - line.
+
+
+ +

Definition at line 171 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::write (uint8_t value) [virtual]
+
+
+

Writes to the LCD. This method writes character to the LCD in the current cursor position.

+

This is the virtual write method, implemented in the Print class, therefore all Print class methods will end up calling this method.

+
Parameters:
+ + +
value[in]Value to write to the LCD.
+
+
+ +

Definition at line 337 of file LCD.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
uint8_t LCD::_cols [protected]
+
+
+ +

Definition at line 497 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_displaycontrol [protected]
+
+
+ +

Definition at line 493 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_displayfunction [protected]
+
+
+ +

Definition at line 491 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_displaymode [protected]
+
+
+ +

Definition at line 495 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_numlines [protected]
+
+
+ +

Definition at line 496 of file LCD.h.

+ +
+
+ +
+
+ + + + +
t_backlighPol LCD::_polarity [protected]
+
+
+ +

Definition at line 498 of file LCD.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_l_c_d.png b/LiquidCrystal/docs/html/class_l_c_d.png new file mode 100644 index 0000000..da99cfc Binary files /dev/null and b/LiquidCrystal/docs/html/class_l_c_d.png differ diff --git a/LiquidCrystal/docs/html/class_liquid_crystal-members.html b/LiquidCrystal/docs/html/class_liquid_crystal-members.html new file mode 100644 index 0000000..16b0877 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal-members.html @@ -0,0 +1,129 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal Member List
+
+
+This is the complete list of members for LiquidCrystal, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal [virtual]
setBacklight(uint8_t value)LiquidCrystal [virtual]
setBacklightPin(uint8_t pin, t_backlighPol pol)LiquidCrystal [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal.html b/LiquidCrystal/docs/html/class_liquid_crystal.html new file mode 100644 index 0000000..efed1c2 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal.html @@ -0,0 +1,827 @@ + + + + +LCD Library: LiquidCrystal Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal Class Reference
+
+
+ +

#include <LiquidCrystal.h>

+
+Inheritance diagram for LiquidCrystal:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + + + + + + + + +

+Public Member Functions

 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t pin, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 44 of file LiquidCrystal.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+

8 bit LCD constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD.

+ +

Definition at line 55 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+ +

Definition at line 62 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 82 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 91 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3 
)
+
+
+

4 bit LCD constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD.

+ +

Definition at line 69 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3 
)
+
+
+ +

Definition at line 75 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 100 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 108 of file LiquidCrystal.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

+

Users should never call this method.

+
Parameters:
+ + +
valueValue to send to the LCD.
+
+
+
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
+ +

Reimplemented from LCD.

+ +

Definition at line 122 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal::setBacklight (uint8_t value) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin. For dimming control of the backlight, the configuration pin must be a PWM output pin. Dim control is achieved by passing a value from 1 to 255 as a parameter. If the pin configured when calling the setBacklightPin does not support PWM, then: (0) backlight off, (1..255) backlight on.
+
Parameters:
+ + +
value,:backlight value. 0: off, 1..255: dim control of the backlight. For negative logic 255: off, 254..0: dim control.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 165 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal::setBacklightPin (uint8_t pin,
t_backlighPol pol 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight.

+
Parameters:
+ + + +
pin,:pin assigned to the backlight
pol,:backlight pin control polarity (POSITIVE, NEGATIVE).
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 155 of file LiquidCrystal.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal.png b/LiquidCrystal/docs/html/class_liquid_crystal.png new file mode 100644 index 0000000..6b24ded Binary files /dev/null and b/LiquidCrystal/docs/html/class_liquid_crystal.png differ diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html b/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html new file mode 100644 index 0000000..987f1e2 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html @@ -0,0 +1,127 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_I2C Member List
+
+
+This is the complete list of members for LiquidCrystal_I2C, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LiquidCrystal_I2C [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_I2C(uint8_t lcd_Addr)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_I2C [virtual]
setBacklight(uint8_t value)LiquidCrystal_I2C [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LiquidCrystal_I2C [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html b/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html new file mode 100644 index 0000000..1a51edb --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html @@ -0,0 +1,599 @@ + + + + +LCD Library: LiquidCrystal_I2C Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_I2C Class Reference
+
+
+ +

#include <LiquidCrystal_I2C.h>

+
+Inheritance diagram for LiquidCrystal_I2C:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t value, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 38 of file LiquidCrystal_I2C.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr)
+
+
+

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

+
Parameters:
+ + +
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
+
+
+ +

Definition at line 96 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
+
+
+ +

Definition at line 102 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs 
)
+
+
+

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

+
Parameters:
+ + + + + +
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]LCD En (Enable) pin connected to the IO extender module
Rw[in]LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]LCD Rs (Reset) pin connected to the IO extender module
+
+
+ +

Definition at line 109 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
+
+
+ +

Definition at line 115 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

+
Parameters:
+ + + + + + + + + +
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]LCD En (Enable) pin connected to the IO extender module
Rw[in]LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]LCD Rs (Reset) pin connected to the IO extender module
d4[in]LCD data 0 pin map on IO extender module
d5[in]LCD data 1 pin map on IO extender module
d6[in]LCD data 2 pin map on IO extender module
d7[in]LCD data 3 pin map on IO extender module
+
+
+ +

Definition at line 123 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
+
+
+ +

Definition at line 130 of file LiquidCrystal_I2C.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void LiquidCrystal_I2C::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
+
+
+

LCD initialization and associated HW. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class or parent class.

+

The begin method can be overloaded if necessary to initialize any HW that is implemented by a library and can't be done during construction, here we use the Wire class.

+
Parameters:
+ + + + +
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]size of the characters of the LCD: LCD_5x8DOTS or LCD_5x10DOTS.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 144 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_I2C::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

+

Users should never call this method.

+
Parameters:
+ + + +
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 240 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_I2C::setBacklight (uint8_t value) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
value,:backlight mode (HIGH|LOW)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 167 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_I2C::setBacklightPin (uint8_t value,
t_backlighPol pol = POSITIVE 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This device doesn't support dimming backlight capability.

+
Parameters:
+ + +
0,:backlight off, 1..255: backlight on.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 158 of file LiquidCrystal_I2C.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.png b/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.png new file mode 100644 index 0000000..3f20cd2 Binary files /dev/null and b/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.png differ diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html new file mode 100644 index 0000000..ce67c0e --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html @@ -0,0 +1,122 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR Member List
+
+
+This is the complete list of members for LiquidCrystal_SR, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR(uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE)LiquidCrystal_SR
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR [virtual]
setBacklightPin(uint8_t pin, t_backlighPol pol)LiquidCrystal_SR [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html new file mode 100644 index 0000000..8df2b71 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html @@ -0,0 +1,271 @@ + + + + +LCD Library: LiquidCrystal_SR Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR Class Reference
+
+
+ +

#include <LiquidCrystal_SR.h>

+
+Inheritance diagram for LiquidCrystal_SR:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

 LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
void setBacklightPin (uint8_t pin, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 94 of file LiquidCrystal_SR.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata,
uint8_t srclock,
uint8_t enable = TWO_WIRE 
)
+
+
+

LCD SHIFT REGISTER constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

+
Parameters:
+ + + + +
srdata[in]pin for shiftregister data line.
srclock[in]pin for shiftregister clock line.
enable[in]optional direct enable pin for the LCD
+
+
+ +

Definition at line 98 of file LiquidCrystal_SR.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

+

Users should never call this method.

+
Parameters:
+ + +
value[in]Value to send to the LCD.
+
+
+
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
+ +

Reimplemented from LCD.

+ +

Definition at line 172 of file LiquidCrystal_SR.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_SR::setBacklight (uint8_t mode) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
mode,:backlight mode (HIGH|LOW)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 207 of file LiquidCrystal_SR.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR::setBacklightPin (uint8_t pin,
t_backlighPol pol 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight.

+
Warning:
Currently not supported
+
Parameters:
+ + + +
mode,:backlight mode (HIGH|LOW)
pol,:backlight polarity
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 202 of file LiquidCrystal_SR.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r.png b/LiquidCrystal/docs/html/class_liquid_crystal___s_r.png new file mode 100644 index 0000000..04adf58 Binary files /dev/null and b/LiquidCrystal/docs/html/class_liquid_crystal___s_r.png differ diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html new file mode 100644 index 0000000..16d73a4 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html @@ -0,0 +1,122 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR2W Member List
+
+
+This is the complete list of members for LiquidCrystal_SR2W, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR2W(uint8_t srdata, uint8_t srclock, t_backlighPol blpol=POSITIVE)LiquidCrystal_SR2W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR2W [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR2W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html new file mode 100644 index 0000000..9db40e9 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html @@ -0,0 +1,230 @@ + + + + +LCD Library: LiquidCrystal_SR2W Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR2W Class Reference
+
+
+ +

#include <LiquidCrystal_SR2W.h>

+
+Inheritance diagram for LiquidCrystal_SR2W:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + +

+Public Member Functions

 LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol=POSITIVE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
+

Detailed Description

+
+

Definition at line 137 of file LiquidCrystal_SR2W.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata,
uint8_t srclock,
t_backlighPol blpol = POSITIVE 
)
+
+
+

LCD 2 wire SHIFT REGISTER constructor. Defines the pin assignments that connect to the shift register. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

+
Parameters:
+ + + + +
srdata[in]Arduino pin for shift register data line.
srclock[in]Arduino pin for shift register clock line.
blpol[in]optional backlight polarity (default = POSITIVE)
+
+
+ +

Definition at line 37 of file LiquidCrystal_SR2W.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR2W::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

+

Users should never call this method.

+
Parameters:
+ + + +
value[in]Value to send to the LCD.
mode[in]DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd the LCD.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 90 of file LiquidCrystal_SR2W.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_SR2W::setBacklight (uint8_t mode) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
mode[in]backlight mode (0 off, non-zero on)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 117 of file LiquidCrystal_SR2W.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.png b/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.png new file mode 100644 index 0000000..774ed61 Binary files /dev/null and b/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.png differ diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w-members.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w-members.html new file mode 100644 index 0000000..ca3d499 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w-members.html @@ -0,0 +1,125 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR3W Member List
+
+
+This is the complete list of members for LiquidCrystal_SR3W, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_SR3W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR3W [virtual]
setBacklight(uint8_t value)LiquidCrystal_SR3W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LiquidCrystal_SR3W [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html new file mode 100644 index 0000000..8354be6 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html @@ -0,0 +1,501 @@ + + + + +LCD Library: LiquidCrystal_SR3W Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR3W Class Reference
+
+
+ +

#include <LiquidCrystal_SR3W.h>

+
+Inheritance diagram for LiquidCrystal_SR3W:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + + + + +

+Public Member Functions

 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t value, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 66 of file LiquidCrystal_SR3W.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe 
)
+
+
+

Class constructor. Initializes class variables and defines the IO driving the shift register. The constructor does not initialize the LCD. Default configuration: Shift register LCD QA - 0 DB4 QB - 1 DB5 QC - 2 DB6 QD - 3 DB7 QE - 4 E QF - 5 QG - 6 Rs GND Rw

+
Parameters:
+ + + + +
strobe[in]digital IO connected to shiftregister strobe pin.
data[in]digital IO connected to the shiftregister data pin.
clk[in]digital IO connected to the shiftregister clock pin.
+
+
+ +

Definition at line 133 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t backlighPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 138 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+

Class constructor. Initializes class variables and defines the control lines of the LCD and the shiftregister. The constructor does not initialize the LCD.

+
Parameters:
+ + + + + + + + + + + +
strobe[in]digital IO connected to shiftregister strobe pin.
data[in]digital IO connected to shiftregister data pin.
clk[in]digital IO connected to shiftregister clock pin.
En[in]LCD En (Enable) pin connected to SR output pin.
Rw[in]LCD Rw (Read/write) pin connected to SR output pin.
Rs[in]LCD Rs (Reg Select) pin connected to SR output pin.
d4[in]LCD data 4 pin map to the SR output pin.
d5[in]LCD data 5 pin map to the SR output pin.
d6[in]LCD data 6 pin map to the SR output pin.
d7[in]LCD data 7 pin map to the SR output pin.
+
+
+ +

Definition at line 145 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlighPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 152 of file LiquidCrystal_SR3W.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR3W::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

+

Users should never call this method.

+
Parameters:
+ + + +
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 162 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_SR3W::setBacklight (uint8_t value) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
value,:backlight mode (HIGH|LOW)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 191 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR3W::setBacklightPin (uint8_t value,
t_backlighPol pol = POSITIVE 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This device doesn't support dimming backlight capability.

+
Parameters:
+ + +
0,:backlight off, 1..255: backlight on.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 183 of file LiquidCrystal_SR3W.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.png b/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.png new file mode 100644 index 0000000..2d13cf7 Binary files /dev/null and b/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.png differ diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html new file mode 100644 index 0000000..8185ec5 --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html @@ -0,0 +1,120 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR_LCD3 Member List
+
+
+This is the complete list of members for LiquidCrystal_SR_LCD3, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
command(uint8_t value)LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR_LCD3(uint8_t srdata, uint8_t srclock, uint8_t enable)LiquidCrystal_SR_LCD3
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR_LCD3 [virtual]
setBacklight(uint8_t value)LCD [inline, virtual]
setBacklightPin(uint8_t value)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html b/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html new file mode 100644 index 0000000..73b9d1e --- /dev/null +++ b/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html @@ -0,0 +1,200 @@ + + + + +LCD Library: LiquidCrystal_SR_LCD3 Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR_LCD3 Class Reference
+
+
+ +

#include <LiquidCrystal_SR_LCD3.h>

+
+Inheritance diagram for LiquidCrystal_SR_LCD3:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + +

+Public Member Functions

 LiquidCrystal_SR_LCD3 (uint8_t srdata, uint8_t srclock, uint8_t enable)
virtual void send (uint8_t value, uint8_t mode)
+

Detailed Description

+
+

Definition at line 16 of file LiquidCrystal_SR_LCD3.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR_LCD3::LiquidCrystal_SR_LCD3 (uint8_t srdata,
uint8_t srclock,
uint8_t enable 
)
+
+
+

LCD SHIFT REGISTER constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

+
Parameters:
+ + + + +
srdata[in]pin for shiftregister data line.
srclock[in]pin for shiftregister clock line.
enable[in]enable pin for the shiftregister (also called strobe).
+
+
+ +

Definition at line 123 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR_LCD3::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

+

Users should never call this method.

+
Parameters:
+ + +
value[in]Value to send to the LCD.
+
+
+
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
+ +

Reimplemented from LCD.

+ +

Definition at line 171 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.png b/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.png new file mode 100644 index 0000000..966e05c Binary files /dev/null and b/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.png differ diff --git a/LiquidCrystal/docs/html/classes.html b/LiquidCrystal/docs/html/classes.html new file mode 100644 index 0000000..f173427 --- /dev/null +++ b/LiquidCrystal/docs/html/classes.html @@ -0,0 +1,91 @@ + + + + +LCD Library: Class Index + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
Class Index
+
+
+
I | L
+ +
  I  
+
  L  
+
LiquidCrystal   LiquidCrystal_SR   LiquidCrystal_SR3W   
I2CIO   LCD   LiquidCrystal_I2C   LiquidCrystal_SR2W   
I | L
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/closed.png b/LiquidCrystal/docs/html/closed.png new file mode 100644 index 0000000..b7d4bd9 Binary files /dev/null and b/LiquidCrystal/docs/html/closed.png differ diff --git a/LiquidCrystal/docs/html/doxygen.css b/LiquidCrystal/docs/html/doxygen.css new file mode 100644 index 0000000..74445fe --- /dev/null +++ b/LiquidCrystal/docs/html/doxygen.css @@ -0,0 +1,835 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 5px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + +} + +.memdoc { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 2px 5px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + + + + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0px; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + diff --git a/LiquidCrystal/docs/html/doxygen.png b/LiquidCrystal/docs/html/doxygen.png new file mode 100644 index 0000000..635ed52 Binary files /dev/null and b/LiquidCrystal/docs/html/doxygen.png differ diff --git a/LiquidCrystal/docs/html/files.html b/LiquidCrystal/docs/html/files.html new file mode 100644 index 0000000..7b5bf54 --- /dev/null +++ b/LiquidCrystal/docs/html/files.html @@ -0,0 +1,102 @@ + + + + +LCD Library: File List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+ + + + + + + + + + + + + + + + +
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h [code]
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/functions.html b/LiquidCrystal/docs/html/functions.html new file mode 100644 index 0000000..7536d38 --- /dev/null +++ b/LiquidCrystal/docs/html/functions.html @@ -0,0 +1,319 @@ + + + + +LCD Library: Class Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- _ -

    +
  • _cols +: LCD +
  • +
  • _displaycontrol +: LCD +
  • +
  • _displayfunction +: LCD +
  • +
  • _displaymode +: LCD +
  • +
  • _numlines +: LCD +
  • +
  • _polarity +: LCD +
  • +
+ + +

- a -

    +
  • autoscroll() +: LCD +
  • +
+ + +

- b -

+ + +

- c -

    +
  • clear() +: LCD +
  • +
  • createChar() +: LCD +
  • +
  • cursor() +: LCD +
  • +
+ + +

- d -

    +
  • digitalRead() +: I2CIO +
  • +
  • digitalWrite() +: I2CIO +
  • +
  • display() +: LCD +
  • +
+ + +

- h -

    +
  • home() +: LCD +
  • +
+ + +

- i -

+ + +

- l -

+ + +

- m -

    +
  • moveCursorLeft() +: LCD +
  • +
  • moveCursorRight() +: LCD +
  • +
+ + +

- n -

    +
  • noAutoscroll() +: LCD +
  • +
  • noBacklight() +: LCD +
  • +
  • noBlink() +: LCD +
  • +
  • noCursor() +: LCD +
  • +
  • noDisplay() +: LCD +
  • +
+ + +

- o -

    +
  • off() +: LCD +
  • +
  • on() +: LCD +
  • +
+ + +

- p -

+ + +

- r -

    +
  • read() +: I2CIO +
  • +
  • rightToLeft() +: LCD +
  • +
+ + +

- s -

+ + +

- w -

+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/functions_func.html b/LiquidCrystal/docs/html/functions_func.html new file mode 100644 index 0000000..6b7e721 --- /dev/null +++ b/LiquidCrystal/docs/html/functions_func.html @@ -0,0 +1,296 @@ + + + + +LCD Library: Class Members - Functions + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+  + +

- a -

    +
  • autoscroll() +: LCD +
  • +
+ + +

- b -

+ + +

- c -

    +
  • clear() +: LCD +
  • +
  • createChar() +: LCD +
  • +
  • cursor() +: LCD +
  • +
+ + +

- d -

    +
  • digitalRead() +: I2CIO +
  • +
  • digitalWrite() +: I2CIO +
  • +
  • display() +: LCD +
  • +
+ + +

- h -

    +
  • home() +: LCD +
  • +
+ + +

- i -

+ + +

- l -

+ + +

- m -

    +
  • moveCursorLeft() +: LCD +
  • +
  • moveCursorRight() +: LCD +
  • +
+ + +

- n -

    +
  • noAutoscroll() +: LCD +
  • +
  • noBacklight() +: LCD +
  • +
  • noBlink() +: LCD +
  • +
  • noCursor() +: LCD +
  • +
  • noDisplay() +: LCD +
  • +
+ + +

- o -

    +
  • off() +: LCD +
  • +
  • on() +: LCD +
  • +
+ + +

- p -

+ + +

- r -

    +
  • read() +: I2CIO +
  • +
  • rightToLeft() +: LCD +
  • +
+ + +

- s -

+ + +

- w -

+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/functions_vars.html b/LiquidCrystal/docs/html/functions_vars.html new file mode 100644 index 0000000..835fbb8 --- /dev/null +++ b/LiquidCrystal/docs/html/functions_vars.html @@ -0,0 +1,109 @@ + + + + +LCD Library: Class Members - Variables + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
    +
  • _cols +: LCD +
  • +
  • _displaycontrol +: LCD +
  • +
  • _displayfunction +: LCD +
  • +
  • _displaymode +: LCD +
  • +
  • _numlines +: LCD +
  • +
  • _polarity +: LCD +
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/globals.html b/LiquidCrystal/docs/html/globals.html new file mode 100644 index 0000000..1df4aa4 --- /dev/null +++ b/LiquidCrystal/docs/html/globals.html @@ -0,0 +1,419 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+
Here is a list of all file members with links to the files they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- b -

    +
  • BACKLIGHT_OFF +: LCD.h +
  • +
  • BACKLIGHT_ON +: LCD.h +
  • +
+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

    +
  • HOME_CLEAR_EXEC +: LCD.h +
  • +
+ + +

- l -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

    +
  • waitUsec() +: LCD.h +
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/globals_defs.html b/LiquidCrystal/docs/html/globals_defs.html new file mode 100644 index 0000000..687bef9 --- /dev/null +++ b/LiquidCrystal/docs/html/globals_defs.html @@ -0,0 +1,350 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+  + +

- _ -

+ + +

- a -

+ + +

- b -

    +
  • BACKLIGHT_OFF +: LCD.h +
  • +
  • BACKLIGHT_ON +: LCD.h +
  • +
+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

    +
  • HOME_CLEAR_EXEC +: LCD.h +
  • +
+ + +

- l -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/globals_enum.html b/LiquidCrystal/docs/html/globals_enum.html new file mode 100644 index 0000000..a6254c2 --- /dev/null +++ b/LiquidCrystal/docs/html/globals_enum.html @@ -0,0 +1,95 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
    +
  • t_backlighPol +: LCD.h +
  • +
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/globals_eval.html b/LiquidCrystal/docs/html/globals_eval.html new file mode 100644 index 0000000..426672c --- /dev/null +++ b/LiquidCrystal/docs/html/globals_eval.html @@ -0,0 +1,98 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/globals_func.html b/LiquidCrystal/docs/html/globals_func.html new file mode 100644 index 0000000..8599914 --- /dev/null +++ b/LiquidCrystal/docs/html/globals_func.html @@ -0,0 +1,128 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/globals_type.html b/LiquidCrystal/docs/html/globals_type.html new file mode 100644 index 0000000..d480edd --- /dev/null +++ b/LiquidCrystal/docs/html/globals_type.html @@ -0,0 +1,98 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/hierarchy.html b/LiquidCrystal/docs/html/hierarchy.html new file mode 100644 index 0000000..36aa829 --- /dev/null +++ b/LiquidCrystal/docs/html/hierarchy.html @@ -0,0 +1,97 @@ + + + + +LCD Library: Class Hierarchy + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/index.html b/LiquidCrystal/docs/html/index.html new file mode 100644 index 0000000..8ad483a --- /dev/null +++ b/LiquidCrystal/docs/html/index.html @@ -0,0 +1,78 @@ + + + + +LCD Library: Main Page + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ +
+
+
+
LCD Library Documentation
+
+
+
+ + + + +
+ +
+ + + + diff --git a/LiquidCrystal/docs/html/installdox b/LiquidCrystal/docs/html/installdox new file mode 100644 index 0000000..edf5bbf --- /dev/null +++ b/LiquidCrystal/docs/html/installdox @@ -0,0 +1,112 @@ +#!/usr/bin/perl + +%subst = ( ); +$quiet = 0; + +while ( @ARGV ) { + $_ = shift @ARGV; + if ( s/^-// ) { + if ( /^l(.*)/ ) { + $v = ($1 eq "") ? shift @ARGV : $1; + ($v =~ /\/$/) || ($v .= "/"); + $_ = $v; + if ( /(.+)\@(.+)/ ) { + if ( exists $subst{$1} ) { + $subst{$1} = $2; + } else { + print STDERR "Unknown tag file $1 given with option -l\n"; + &usage(); + } + } else { + print STDERR "Argument $_ is invalid for option -l\n"; + &usage(); + } + } + elsif ( /^q/ ) { + $quiet = 1; + } + elsif ( /^\?|^h/ ) { + &usage(); + } + else { + print STDERR "Illegal option -$_\n"; + &usage(); + } + } + else { + push (@files, $_ ); + } +} + +foreach $sub (keys %subst) +{ + if ( $subst{$sub} eq "" ) + { + print STDERR "No substitute given for tag file `$sub'\n"; + &usage(); + } + elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) + { + print "Substituting $subst{$sub} for each occurrence of tag file $sub\n"; + } +} + +if ( ! @files ) { + if (opendir(D,".")) { + foreach $file ( readdir(D) ) { + $match = ".html"; + next if ( $file =~ /^\.\.?$/ ); + ($file =~ /$match/) && (push @files, $file); + ($file =~ /\.svg/) && (push @files, $file); + ($file =~ "navtree.js") && (push @files, $file); + } + closedir(D); + } +} + +if ( ! @files ) { + print STDERR "Warning: No input files given and none found!\n"; +} + +foreach $f (@files) +{ + if ( ! $quiet ) { + print "Editing: $f...\n"; + } + $oldf = $f; + $f .= ".bak"; + unless (rename $oldf,$f) { + print STDERR "Error: cannot rename file $oldf\n"; + exit 1; + } + if (open(F,"<$f")) { + unless (open(G,">$oldf")) { + print STDERR "Error: opening file $oldf for writing\n"; + exit 1; + } + if ($oldf ne "tree.js") { + while () { + s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; + print G "$_"; + } + } + else { + while () { + s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; + print G "$_"; + } + } + } + else { + print STDERR "Warning file $f does not exist\n"; + } + unlink $f; +} + +sub usage { + print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; + print STDERR "Options:\n"; + print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; + print STDERR " -q Quiet mode\n\n"; + exit 1; +} diff --git a/LiquidCrystal/docs/html/jquery.js b/LiquidCrystal/docs/html/jquery.js new file mode 100644 index 0000000..c052173 --- /dev/null +++ b/LiquidCrystal/docs/html/jquery.js @@ -0,0 +1,54 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) +{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() +{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); +/* + * jQuery UI 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * ui.core.js + */ +(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f
');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)) +{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);; +/** + * jQuery.ScrollTo - Easy element scrolling using jQuery. + * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com + * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php). + * Date: 2/8/2008 + * @author Ariel Flesler + * @version 1.3.2 + */ +;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); + diff --git a/LiquidCrystal/docs/html/logoGoogle.jpg b/LiquidCrystal/docs/html/logoGoogle.jpg new file mode 100644 index 0000000..28f6ae1 Binary files /dev/null and b/LiquidCrystal/docs/html/logoGoogle.jpg differ diff --git a/LiquidCrystal/docs/html/nav_f.png b/LiquidCrystal/docs/html/nav_f.png new file mode 100644 index 0000000..1b07a16 Binary files /dev/null and b/LiquidCrystal/docs/html/nav_f.png differ diff --git a/LiquidCrystal/docs/html/nav_h.png b/LiquidCrystal/docs/html/nav_h.png new file mode 100644 index 0000000..01f5fa6 Binary files /dev/null and b/LiquidCrystal/docs/html/nav_h.png differ diff --git a/LiquidCrystal/docs/html/open.png b/LiquidCrystal/docs/html/open.png new file mode 100644 index 0000000..7b35d2c Binary files /dev/null and b/LiquidCrystal/docs/html/open.png differ diff --git a/LiquidCrystal/docs/html/search/all_5f.html b/LiquidCrystal/docs/html/search/all_5f.html new file mode 100644 index 0000000..f4de1dd --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_5f.html @@ -0,0 +1,62 @@ + + + + + + + +
+
Loading...
+
+
+ _cols + LCD +
+
+
+
+ _displaycontrol + LCD +
+
+
+
+ _displayfunction + LCD +
+
+
+
+ _displaymode + LCD +
+
+
+
+ _I2CIO_VERSION + I2CIO.h +
+
+
+
+ _numlines + LCD +
+
+
+
+ _polarity + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_61.html b/LiquidCrystal/docs/html/search/all_61.html new file mode 100644 index 0000000..77a85bb --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_61.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ ATOMIC_BLOCK + FastIO.h +
+
+
+
+ ATOMIC_RESTORESTATE + FastIO.h +
+
+
+
+ autoscroll + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_62.html b/LiquidCrystal/docs/html/search/all_62.html new file mode 100644 index 0000000..47c4abb --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_62.html @@ -0,0 +1,54 @@ + + + + + + + +
+
Loading...
+
+
+ backlight + LCD +
+
+
+
+ BACKLIGHT_OFF + LCD.h +
+
+
+
+ BACKLIGHT_ON + LCD.h +
+
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_63.html b/LiquidCrystal/docs/html/search/all_63.html new file mode 100644 index 0000000..fd37373 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_63.html @@ -0,0 +1,44 @@ + + + + + + + +
+
Loading...
+
+
+ clear + LCD +
+
+
+
+ COMMAND + LCD.h +
+
+
+
+ createChar + LCD +
+
+
+
+ cursor + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_64.html b/LiquidCrystal/docs/html/search/all_64.html new file mode 100644 index 0000000..e66c526 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_64.html @@ -0,0 +1,80 @@ + + + + + + + +
+
Loading...
+ + + + +
+
+ DATA + LCD.h +
+
+
+
+ digitalRead + I2CIO +
+
+
+
+ digitalWrite + I2CIO +
+
+
+
+ display + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_65.html b/LiquidCrystal/docs/html/search/all_65.html new file mode 100644 index 0000000..7ac4e79 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_65.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+ +
+
+ EXEC_TIME + LiquidCrystal.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_66.html b/LiquidCrystal/docs/html/search/all_66.html new file mode 100644 index 0000000..f615e95 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_66.html @@ -0,0 +1,156 @@ + + + + + + + +
+
Loading...
+
+ +
+
+
+ FastIO.h +
+
+
+
+ fio_bit + FastIO.h +
+
+ + +
+
+ fio_digitalWrite_HIGH + FastIO.h +
+
+
+
+ fio_digitalWrite_LOW + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCH + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCHTO + FastIO.h +
+
+
+
+ FIO_FALLBACK + FastIO.h +
+
+ + + +
+
+ fio_register + FastIO.h +
+
+ + + +
+
+ FOUR_BITS + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_68.html b/LiquidCrystal/docs/html/search/all_68.html new file mode 100644 index 0000000..b476d6e --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_68.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ home + LCD +
+
+
+
+ HOME_CLEAR_EXEC + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_69.html b/LiquidCrystal/docs/html/search/all_69.html new file mode 100644 index 0000000..2bbba17 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_69.html @@ -0,0 +1,39 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO + +
+
+
+
+ I2CIO.cpp +
+
+
+
+ I2CIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_6c.html b/LiquidCrystal/docs/html/search/all_6c.html new file mode 100644 index 0000000..2b500de --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_6c.html @@ -0,0 +1,354 @@ + + + + + + + +
+
Loading...
+
+
+ LCD +
+ LCD + LCD::LCD() +
+
+
+
+
+ LCD.cpp +
+
+
+
+ LCD.h +
+
+
+
+ LCD_1LINE + LCD.h +
+
+
+
+ LCD_2LINE + LCD.h +
+
+
+
+ LCD_4BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_4BITMODE + LCD.h +
+
+
+
+ LCD_5x10DOTS + LCD.h +
+
+
+
+ LCD_5x8DOTS + LCD.h +
+
+
+
+ LCD_8BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_8BITMODE + LCD.h +
+
+ +
+
+ LCD_BLINKOFF + LCD.h +
+
+
+
+ LCD_BLINKON + LCD.h +
+
+
+
+ LCD_CLEARDISPLAY + LCD.h +
+
+
+
+ LCD_CURSORMOVE + LCD.h +
+
+
+
+ LCD_CURSOROFF + LCD.h +
+
+
+
+ LCD_CURSORON + LCD.h +
+
+
+
+ LCD_CURSORSHIFT + LCD.h +
+
+
+
+ LCD_DISPLAYCONTROL + LCD.h +
+
+
+
+ LCD_DISPLAYMOVE + LCD.h +
+
+
+
+ LCD_DISPLAYOFF + LCD.h +
+
+
+
+ LCD_DISPLAYON + LCD.h +
+
+
+
+ LCD_ENTRYLEFT + LCD.h +
+
+
+
+ LCD_ENTRYMODESET + LCD.h +
+
+
+
+ LCD_ENTRYRIGHT + LCD.h +
+
+
+ +
+
+ +
+
+
+ LCD_FUNCTIONSET + LCD.h +
+
+
+
+ LCD_MOVELEFT + LCD.h +
+
+
+
+ LCD_MOVERIGHT + LCD.h +
+
+ +
+
+ LCD_RETURNHOME + LCD.h +
+
+
+
+ LCD_SETCGRAMADDR + LCD.h +
+
+
+
+ LCD_SETDDRAMADDR + LCD.h +
+
+
+
+ leftToRight + LCD +
+
+ + + + + + + + + + + + + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_6d.html b/LiquidCrystal/docs/html/search/all_6d.html new file mode 100644 index 0000000..6a0ea3f --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_6d.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ moveCursorLeft + LCD +
+
+
+
+ moveCursorRight + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_6e.html b/LiquidCrystal/docs/html/search/all_6e.html new file mode 100644 index 0000000..f3e1f8b --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_6e.html @@ -0,0 +1,56 @@ + + + + + + + +
+
Loading...
+
+
+ NEGATIVE + LCD.h +
+
+
+
+ noAutoscroll + LCD +
+
+
+
+ noBacklight + LCD +
+
+ +
+
+ noCursor + LCD +
+
+
+
+ noDisplay + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_6f.html b/LiquidCrystal/docs/html/search/all_6f.html new file mode 100644 index 0000000..e5e659c --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_6f.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ off + LCD +
+
+
+
+ on + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_70.html b/LiquidCrystal/docs/html/search/all_70.html new file mode 100644 index 0000000..29b653f --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_70.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ pinMode + I2CIO +
+
+
+
+ portMode + I2CIO +
+
+
+
+ POSITIVE + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_72.html b/LiquidCrystal/docs/html/search/all_72.html new file mode 100644 index 0000000..d2d6cc6 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_72.html @@ -0,0 +1,50 @@ + + + + + + + +
+
Loading...
+
+
+ read + I2CIO +
+
+
+
+ rightToLeft + LCD +
+
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_73.html b/LiquidCrystal/docs/html/search/all_73.html new file mode 100644 index 0000000..94765a5 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_73.html @@ -0,0 +1,117 @@ + + + + + + + +
+
Loading...
+
+
+ scrollDisplayLeft + LCD +
+
+
+
+ scrollDisplayRight + LCD +
+
+ + + +
+
+ setCursor + LCD +
+
+
+
+ SKIP + FastIO.h +
+
+
+
+ SR2W_BL_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_DATA_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_EN_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_RS_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR_EN_BIT + LiquidCrystal_SR.h +
+
+
+
+ SR_RS_BIT + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_74.html b/LiquidCrystal/docs/html/search/all_74.html new file mode 100644 index 0000000..61cec84 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_74.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ t_backlighPol + LCD.h +
+
+
+
+ TWO_WIRE + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/all_77.html b/LiquidCrystal/docs/html/search/all_77.html new file mode 100644 index 0000000..d81a974 --- /dev/null +++ b/LiquidCrystal/docs/html/search/all_77.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+
+
+ waitUsec + LCD.h +
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/classes_69.html b/LiquidCrystal/docs/html/search/classes_69.html new file mode 100644 index 0000000..48921d3 --- /dev/null +++ b/LiquidCrystal/docs/html/search/classes_69.html @@ -0,0 +1,25 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/classes_6c.html b/LiquidCrystal/docs/html/search/classes_6c.html new file mode 100644 index 0000000..7054818 --- /dev/null +++ b/LiquidCrystal/docs/html/search/classes_6c.html @@ -0,0 +1,50 @@ + + + + + + + +
+
Loading...
+
+
+ LCD +
+
+
+ +
+ + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/close.png b/LiquidCrystal/docs/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/LiquidCrystal/docs/html/search/close.png differ diff --git a/LiquidCrystal/docs/html/search/defines_5f.html b/LiquidCrystal/docs/html/search/defines_5f.html new file mode 100644 index 0000000..8a9b6d1 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_5f.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ _I2CIO_VERSION + I2CIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_61.html b/LiquidCrystal/docs/html/search/defines_61.html new file mode 100644 index 0000000..64e6e11 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_61.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ ATOMIC_BLOCK + FastIO.h +
+
+
+
+ ATOMIC_RESTORESTATE + FastIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_62.html b/LiquidCrystal/docs/html/search/defines_62.html new file mode 100644 index 0000000..e65a734 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_62.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ BACKLIGHT_OFF + LCD.h +
+
+
+
+ BACKLIGHT_ON + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_63.html b/LiquidCrystal/docs/html/search/defines_63.html new file mode 100644 index 0000000..d74c25d --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_63.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ COMMAND + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_64.html b/LiquidCrystal/docs/html/search/defines_64.html new file mode 100644 index 0000000..f47ef02 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_64.html @@ -0,0 +1,62 @@ + + + + + + + +
+
Loading...
+ + + + +
+
+ DATA + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_65.html b/LiquidCrystal/docs/html/search/defines_65.html new file mode 100644 index 0000000..7ac4e79 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_65.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+ +
+
+ EXEC_TIME + LiquidCrystal.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_66.html b/LiquidCrystal/docs/html/search/defines_66.html new file mode 100644 index 0000000..6225879 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_66.html @@ -0,0 +1,56 @@ + + + + + + + +
+
Loading...
+
+
+ fio_digitalWrite_HIGH + FastIO.h +
+
+
+
+ fio_digitalWrite_LOW + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCH + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCHTO + FastIO.h +
+
+
+
+ FIO_FALLBACK + FastIO.h +
+
+
+
+ FOUR_BITS + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_68.html b/LiquidCrystal/docs/html/search/defines_68.html new file mode 100644 index 0000000..28e210e --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_68.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ HOME_CLEAR_EXEC + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_6c.html b/LiquidCrystal/docs/html/search/defines_6c.html new file mode 100644 index 0000000..525e0b4 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_6c.html @@ -0,0 +1,219 @@ + + + + + + + +
+
Loading...
+
+
+ LCD_1LINE + LCD.h +
+
+
+
+ LCD_2LINE + LCD.h +
+
+
+
+ LCD_4BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_4BITMODE + LCD.h +
+
+
+
+ LCD_5x10DOTS + LCD.h +
+
+
+
+ LCD_5x8DOTS + LCD.h +
+
+
+
+ LCD_8BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_8BITMODE + LCD.h +
+
+ +
+
+ LCD_BLINKOFF + LCD.h +
+
+
+
+ LCD_BLINKON + LCD.h +
+
+
+
+ LCD_CLEARDISPLAY + LCD.h +
+
+
+
+ LCD_CURSORMOVE + LCD.h +
+
+
+
+ LCD_CURSOROFF + LCD.h +
+
+
+
+ LCD_CURSORON + LCD.h +
+
+
+
+ LCD_CURSORSHIFT + LCD.h +
+
+
+
+ LCD_DISPLAYCONTROL + LCD.h +
+
+
+
+ LCD_DISPLAYMOVE + LCD.h +
+
+
+
+ LCD_DISPLAYOFF + LCD.h +
+
+
+
+ LCD_DISPLAYON + LCD.h +
+
+
+
+ LCD_ENTRYLEFT + LCD.h +
+
+
+
+ LCD_ENTRYMODESET + LCD.h +
+
+
+
+ LCD_ENTRYRIGHT + LCD.h +
+
+
+ +
+
+ +
+
+
+ LCD_FUNCTIONSET + LCD.h +
+
+
+
+ LCD_MOVELEFT + LCD.h +
+
+
+
+ LCD_MOVERIGHT + LCD.h +
+
+ +
+
+ LCD_RETURNHOME + LCD.h +
+
+
+
+ LCD_SETCGRAMADDR + LCD.h +
+
+
+
+ LCD_SETDDRAMADDR + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_72.html b/LiquidCrystal/docs/html/search/defines_72.html new file mode 100644 index 0000000..091148d --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_72.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_73.html b/LiquidCrystal/docs/html/search/defines_73.html new file mode 100644 index 0000000..d384df7 --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_73.html @@ -0,0 +1,62 @@ + + + + + + + +
+
Loading...
+
+
+ SKIP + FastIO.h +
+
+
+
+ SR2W_BL_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_DATA_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_EN_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_RS_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR_EN_BIT + LiquidCrystal_SR.h +
+
+
+
+ SR_RS_BIT + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/defines_74.html b/LiquidCrystal/docs/html/search/defines_74.html new file mode 100644 index 0000000..ba27d7f --- /dev/null +++ b/LiquidCrystal/docs/html/search/defines_74.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ TWO_WIRE + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/enums_74.html b/LiquidCrystal/docs/html/search/enums_74.html new file mode 100644 index 0000000..2c24947 --- /dev/null +++ b/LiquidCrystal/docs/html/search/enums_74.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ t_backlighPol + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/enumvalues_6e.html b/LiquidCrystal/docs/html/search/enumvalues_6e.html new file mode 100644 index 0000000..13de3f4 --- /dev/null +++ b/LiquidCrystal/docs/html/search/enumvalues_6e.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ NEGATIVE + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/enumvalues_70.html b/LiquidCrystal/docs/html/search/enumvalues_70.html new file mode 100644 index 0000000..ccfeb29 --- /dev/null +++ b/LiquidCrystal/docs/html/search/enumvalues_70.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ POSITIVE + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/files_66.html b/LiquidCrystal/docs/html/search/files_66.html new file mode 100644 index 0000000..2eeecab --- /dev/null +++ b/LiquidCrystal/docs/html/search/files_66.html @@ -0,0 +1,30 @@ + + + + + + + +
+
Loading...
+
+ +
+
+
+ FastIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/files_69.html b/LiquidCrystal/docs/html/search/files_69.html new file mode 100644 index 0000000..6d0e429 --- /dev/null +++ b/LiquidCrystal/docs/html/search/files_69.html @@ -0,0 +1,30 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO.cpp +
+
+
+
+ I2CIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/files_6c.html b/LiquidCrystal/docs/html/search/files_6c.html new file mode 100644 index 0000000..84551ce --- /dev/null +++ b/LiquidCrystal/docs/html/search/files_6c.html @@ -0,0 +1,80 @@ + + + + + + + +
+
Loading...
+
+
+ LCD.cpp +
+
+
+
+ LCD.h +
+
+ + + + + + + + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_61.html b/LiquidCrystal/docs/html/search/functions_61.html new file mode 100644 index 0000000..7fb674c --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_61.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ autoscroll + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_62.html b/LiquidCrystal/docs/html/search/functions_62.html new file mode 100644 index 0000000..b75e8f6 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_62.html @@ -0,0 +1,42 @@ + + + + + + + +
+
Loading...
+
+
+ backlight + LCD +
+
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_63.html b/LiquidCrystal/docs/html/search/functions_63.html new file mode 100644 index 0000000..118cc32 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_63.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ clear + LCD +
+
+
+
+ createChar + LCD +
+
+
+
+ cursor + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_64.html b/LiquidCrystal/docs/html/search/functions_64.html new file mode 100644 index 0000000..ba77ba3 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_64.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ digitalRead + I2CIO +
+
+
+
+ digitalWrite + I2CIO +
+
+
+
+ display + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_65.html b/LiquidCrystal/docs/html/search/functions_65.html new file mode 100644 index 0000000..86ec5ea --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_65.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ expanderWrite + LiquidCrystal_I2C +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_66.html b/LiquidCrystal/docs/html/search/functions_66.html new file mode 100644 index 0000000..8cdaa77 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_66.html @@ -0,0 +1,98 @@ + + + + + + + +
+
Loading...
+ + + + + + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_68.html b/LiquidCrystal/docs/html/search/functions_68.html new file mode 100644 index 0000000..15aec73 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_68.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ home + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_69.html b/LiquidCrystal/docs/html/search/functions_69.html new file mode 100644 index 0000000..dc3dc28 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_69.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO + I2CIO +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_6c.html b/LiquidCrystal/docs/html/search/functions_6c.html new file mode 100644 index 0000000..1de9e5b --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_6c.html @@ -0,0 +1,83 @@ + + + + + + + +
+
Loading...
+
+
+ LCD + LCD +
+
+
+
+ leftToRight + LCD +
+
+ + +
+
+ LiquidCrystal_SR + LiquidCrystal_SR +
+
+
+
+ LiquidCrystal_SR2W + LiquidCrystal_SR2W +
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_6d.html b/LiquidCrystal/docs/html/search/functions_6d.html new file mode 100644 index 0000000..6a0ea3f --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_6d.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ moveCursorLeft + LCD +
+
+
+
+ moveCursorRight + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_6e.html b/LiquidCrystal/docs/html/search/functions_6e.html new file mode 100644 index 0000000..02acfb2 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_6e.html @@ -0,0 +1,50 @@ + + + + + + + +
+
Loading...
+
+
+ noAutoscroll + LCD +
+
+
+
+ noBacklight + LCD +
+
+ +
+
+ noCursor + LCD +
+
+
+
+ noDisplay + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_6f.html b/LiquidCrystal/docs/html/search/functions_6f.html new file mode 100644 index 0000000..e5e659c --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_6f.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ off + LCD +
+
+
+
+ on + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_70.html b/LiquidCrystal/docs/html/search/functions_70.html new file mode 100644 index 0000000..16e8ed0 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_70.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ pinMode + I2CIO +
+
+
+
+ portMode + I2CIO +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_72.html b/LiquidCrystal/docs/html/search/functions_72.html new file mode 100644 index 0000000..31d4b8e --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_72.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ read + I2CIO +
+
+
+
+ rightToLeft + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_73.html b/LiquidCrystal/docs/html/search/functions_73.html new file mode 100644 index 0000000..8bf5e07 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_73.html @@ -0,0 +1,75 @@ + + + + + + + +
+
Loading...
+
+
+ scrollDisplayLeft + LCD +
+
+
+
+ scrollDisplayRight + LCD +
+
+ + + +
+
+ setCursor + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/functions_77.html b/LiquidCrystal/docs/html/search/functions_77.html new file mode 100644 index 0000000..d81a974 --- /dev/null +++ b/LiquidCrystal/docs/html/search/functions_77.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+
+
+ waitUsec + LCD.h +
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/mag_sel.png b/LiquidCrystal/docs/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/LiquidCrystal/docs/html/search/mag_sel.png differ diff --git a/LiquidCrystal/docs/html/search/nomatches.html b/LiquidCrystal/docs/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/LiquidCrystal/docs/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/LiquidCrystal/docs/html/search/search.css b/LiquidCrystal/docs/html/search/search.css new file mode 100644 index 0000000..50249e5 --- /dev/null +++ b/LiquidCrystal/docs/html/search/search.css @@ -0,0 +1,240 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#searchli { + float: right; + display: block; + width: 170px; + height: 36px; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:116px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} diff --git a/LiquidCrystal/docs/html/search/search.js b/LiquidCrystal/docs/html/search/search.js new file mode 100644 index 0000000..1b2829a --- /dev/null +++ b/LiquidCrystal/docs/html/search/search.js @@ -0,0 +1,742 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111011001111101110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111101011001111101100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 8: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111010001000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "files", + 3: "functions", + 4: "variables", + 5: "typedefs", + 6: "enums", + 7: "enumvalues", + 8: "defines" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var hexCode; + if (code<16) + { + hexCode="0"+code.toString(16); + } + else + { + hexCode=code.toString(16); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + { + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location.href = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} diff --git a/LiquidCrystal/docs/html/search/search_l.png b/LiquidCrystal/docs/html/search/search_l.png new file mode 100644 index 0000000..c872f4d Binary files /dev/null and b/LiquidCrystal/docs/html/search/search_l.png differ diff --git a/LiquidCrystal/docs/html/search/search_m.png b/LiquidCrystal/docs/html/search/search_m.png new file mode 100644 index 0000000..b429a16 Binary files /dev/null and b/LiquidCrystal/docs/html/search/search_m.png differ diff --git a/LiquidCrystal/docs/html/search/search_r.png b/LiquidCrystal/docs/html/search/search_r.png new file mode 100644 index 0000000..97ee8b4 Binary files /dev/null and b/LiquidCrystal/docs/html/search/search_r.png differ diff --git a/LiquidCrystal/docs/html/search/typedefs_66.html b/LiquidCrystal/docs/html/search/typedefs_66.html new file mode 100644 index 0000000..7ad240b --- /dev/null +++ b/LiquidCrystal/docs/html/search/typedefs_66.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ fio_bit + FastIO.h +
+
+
+
+ fio_register + FastIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/search/variables_5f.html b/LiquidCrystal/docs/html/search/variables_5f.html new file mode 100644 index 0000000..0bac2f1 --- /dev/null +++ b/LiquidCrystal/docs/html/search/variables_5f.html @@ -0,0 +1,56 @@ + + + + + + + +
+
Loading...
+
+
+ _cols + LCD +
+
+
+
+ _displaycontrol + LCD +
+
+
+
+ _displayfunction + LCD +
+
+
+
+ _displaymode + LCD +
+
+
+
+ _numlines + LCD +
+
+
+
+ _polarity + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/LiquidCrystal/docs/html/tab_a.png b/LiquidCrystal/docs/html/tab_a.png new file mode 100644 index 0000000..2d99ef2 Binary files /dev/null and b/LiquidCrystal/docs/html/tab_a.png differ diff --git a/LiquidCrystal/docs/html/tab_b.png b/LiquidCrystal/docs/html/tab_b.png new file mode 100644 index 0000000..b2c3d2b Binary files /dev/null and b/LiquidCrystal/docs/html/tab_b.png differ diff --git a/LiquidCrystal/docs/html/tab_h.png b/LiquidCrystal/docs/html/tab_h.png new file mode 100644 index 0000000..c11f48f Binary files /dev/null and b/LiquidCrystal/docs/html/tab_h.png differ diff --git a/LiquidCrystal/docs/html/tab_s.png b/LiquidCrystal/docs/html/tab_s.png new file mode 100644 index 0000000..978943a Binary files /dev/null and b/LiquidCrystal/docs/html/tab_s.png differ diff --git a/LiquidCrystal/docs/html/tabs.css b/LiquidCrystal/docs/html/tabs.css new file mode 100644 index 0000000..2192056 --- /dev/null +++ b/LiquidCrystal/docs/html/tabs.css @@ -0,0 +1,59 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde b/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde new file mode 100644 index 0000000..0c06514 --- /dev/null +++ b/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde @@ -0,0 +1,78 @@ +#include +#include + + +#define CONTRAST_PIN 9 +#define BACKLIGHT_PIN 7 +#define CONTRAST 110 +LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGH_PIN, POSITIVE ); + + +// Creat a set of new characters +byte smiley[8] = { + 0b00000, + 0b00000, + 0b01010, + 0b00000, + 0b00000, + 0b10001, + 0b01110, + 0b00000 +}; + +byte armsUp[8] = { + 0b00100, + 0b01010, + 0b00100, + 0b10101, + 0b01110, + 0b00100, + 0b00100, + 0b01010 +}; + +byte frownie[8] = { + 0b00000, + 0b00000, + 0b01010, + 0b00000, + 0b00000, + 0b00000, + 0b01110, + 0b10001 +}; + +void setup() +{ + Serial.begin ( 57600 ); + + // Switch on the backlight and LCD contrast levels + pinMode(CONTRAST_PIN, OUTPUT); + analogWrite ( CONTRAST_PIN, CONTRAST ); + + //lcd.setBacklightPin ( BACKLIGHT_PIN, POSITIVE ); + //lcd.setBacklight ( HIGH ); + lcd.backlight(); + + lcd.begin(16,2); // initialize the lcd + + lcd.createChar (0, smiley); // load character to the LCD + lcd.createChar (1, armsUp); // load character to the LCD + lcd.createChar (2, frownie); // load character to the LCD + + lcd.home (); // go home + lcd.print("Hello, ARDUINO "); + lcd.setCursor ( 0, 1 ); // go to the next line + lcd.print (" FORUM - fm "); +} + +void loop() +{ + // Do a little animation by writing to the same location + lcd.setCursor ( 14, 1 ); + lcd.print (char(2)); + delay (200); + lcd.setCursor ( 14, 1 ); + lcd.print ( char(0)); + delay (200); +} diff --git a/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde b/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde new file mode 100644 index 0000000..1112e78 --- /dev/null +++ b/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde @@ -0,0 +1,36 @@ +#include +#include + +LiquidCrystal_SR lcd(8,7,TWO_WIRE); +// | | +// | \-- Clock Pin +// \---- Data/Enable Pin + +// Creat a set of new characters +byte armsUp[8] = {0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010}; +byte armsDown[8] = {0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010}; + +void setup(){ + + lcd.begin(16,2); // initialize the lcd + + lcd.createChar (0, armsUp); // load character to the LCD + lcd.createChar (1, armsDown); // load character to the LCD + + lcd.home (); // go home + lcd.print("LiquidCrystal_SR"); +} + +void loop(){ + // Do a little animation + for(int i = 0; i <= 15; i++) showHappyGuy(i); + for(int i = 15; i >= 0; i--) showHappyGuy(i); +} + +void showHappyGuy(int pos){ + lcd.setCursor ( pos, 1 ); // go to position + lcd.print(char(random(0,2))); // show one of the two custom characters + delay(150); // wait so it can be seen + lcd.setCursor ( pos, 1 ); // go to position again + lcd.print(" "); // delete character +} \ No newline at end of file diff --git a/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde b/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde new file mode 100644 index 0000000..d0fd78c --- /dev/null +++ b/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde @@ -0,0 +1,61 @@ +#include +#include + + + +#define BACKLIGHT_PIN 13 + +LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address + +//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address + + +// Creat a set of new characters +const uint8_t charBitmap[][8] = { + { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 }, + { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 }, + { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 }, + { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 }, + { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 }, + { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 }, + { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 }, + { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 } + +}; + +void setup() +{ + int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); + + // Switch on the backlight + pinMode ( BACKLIGHT_PIN, OUTPUT ); + digitalWrite ( BACKLIGHT_PIN, HIGH ); + + lcd.begin(16,2); // initialize the lcd + + for ( int i = 0; i < charBitmapSize; i++ ) + { + lcd.createChar ( i, (uint8_t *)charBitmap[i] ); + } + + lcd.home (); // go home + lcd.print("Hello, ARDUINO "); + lcd.setCursor ( 0, 1 ); // go to the next line + lcd.print (" FORUM - fm "); + delay ( 1000 ); +} + +void loop() +{ + lcd.home (); + // Do a little animation by writing to the same location + for ( int i = 0; i < 2; i++ ) + { + for ( int j = 0; j < 16; j++ ) + { + lcd.print (char(random(7))); + } + lcd.setCursor ( 0, 1 ); + } + delay (200); +} diff --git a/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde b/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde new file mode 100644 index 0000000..4edcddc --- /dev/null +++ b/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde @@ -0,0 +1,274 @@ +static char dummyvar; // dummy declaration for STUPID IDE!!!! +/*---------------------------------------------------------------------------- + * vi:ts=4 + * + * LCDiSpeed - LCD Interface Speed + * + * Created by Bill Perry 2012-03-16 + * Copyright 2012 - Under creative commons license 3.0: + * Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) + * license page: http://creativecommons.org/licenses/by-nc-sa/3.0/ + * + * Sketch to measure and report the speed of the interface to the LCD and + * speed of updating the LCD. + * + * It runs a Frames/Sec (FPS) test which writes a "frame" of each digit 0-9 to + * the display. + * A "frame" is a full display of characters. + * It is created by positioning the cursor to the begining of each row + * and then writing a character to every position on the row, until the + * entire display is filled. + * The FPS test does a frame of 9's then 8's, .... down to 0's + * On fast interfaces it will not normally be seen. + * + * The sketch will then calculate & report transfer speeds and + * LCD update rates to the LCD display. + * + * Reported Information: + * - Single byte transfer speed (ByteXfer) + * This is the time it takes for a single character to be sent from + * the sketch to the LCD display. + * + * - Frame/Sec (FPS) + * This is the number of times the full display can be updated + * in one second. + * + * - Frame Time (Ftime) + * This is the amount of time it takes to update the full LCD display. + * + * + * The sketch will also report "independent" FPS and Ftime values. + * These are timing values that are independent of the size of the LCD under test. + * Currently they represent the timing for a 16x2 LCD + * The value of always having numbers for a 16x2 display + * is that these numbers can be compared to each other since they are + * independent of the size of the actual LCD display that is running the test. + * + * All times & rates are measured and calculeted from what a sketch "sees" + * using the LiquidCrystal API. + * It includes any/all s/w overhead including the time to go through the + * Arduino Print class and LCD library. + * The actual low level hardware times are obviously lower. + * + * History + * 2012.03.15 bperrybap - Original creation + * + * @author Bill Perry - bperrybap@opensource.billsworld.billandterrie.com + *---------------------------------------------------------------------------- + +/* + * Define your LCD size + */ +#define LCD_COLS 16 +#define LCD_ROWS 2 + +/* + * Pick your interface. + */ + +//#define LCDIF_4BIT +//#define LCDIF_I2C +//#define LCDIF_SR2W +//#define LCDIF_SR_2W // SR in 2 wire mode +//#define LCDIF_SR_3W // SR in 3 wire mode +#define LCDIF_SR3W +//#define LCDIF_SR1W + + +/* + * Options + */ + +#define FPS_iter 1 // number of iterations to repeat each "frame" within the test + // (current frame test is 10 full display frames, 1 for each digits 0-9) + // FPS_iter like 100 will allow the frames to be seen + // Note: the only reason other than visual to make this larger than 1 + // might be to compensate for Async serial buffering should a serial interface be tested + // even with 1 iteration, 340 bytes are written for a 16x2 display + // bytes written = FPS_iter * ((LCD_ROWS * LCD_COLS) + LCD_ROWS) * 10 + +#define iLCD // turn on code to calculate speed of "independent" sized display +#define iLCD_ROWS 2 // independent FPS row size +#define iLCD_COLS 16 // independent FPS col size + + +#define DELAY_TIME 3500 // delay time to see information on lcd + +#if defined(LCDIF_4BIT) + +// Include the Liquid Crystal library code: +#include + +// initialize the library with the numbers of the interface pins +// lcd(RS, E, d4, d5, d6, d7, bl, polarity) +#ifdef BACKLIGHT_ON +LiquidCrystal lcd( 8, 9, 4, 5, 6, 7, 10, POSITIVE); // new constructor with backlight support +#else +LiquidCrystal lcd( 8, 9, 4, 5, 6, 7); // old style constructor w/o backlight (to test old library) +#endif + +#elif defined(LCDIF_I2C) +#include +#include + +LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address + + +#elif defined(LCDIF_SR3W) +#include + // d,clk,strb, en,rw,rs,d4,d5,d6,d7,bl,blpol +//LiquidCrystal_SR3W lcd (2, 3, 4, 6, 7, 1, 2, 3, 4, 5, 0, POSITIVE); +LiquidCrystal_SR3W lcd(3, 2, 4); + +#elif defined(LCDIF_SR2W) + +#include + // d, clk, (blPolarity optional, defaults to POSITIVE) +LiquidCrystal_SR2W lcd (2, 3); + +#elif defined(LCDIF_SR1W) + +#include +LiquidCrystal_SR1W lcd (2); + +#elif defined(LCDIF_SR_2W) + +#include + // d, clk +LiquidCrystal_SR lcd (2, 3); + +#elif defined(LCDIF_SR_3W) + +#include + // d,clk,strb +LiquidCrystal_SR lcd (2, 3, 4); + +#endif + +void setup() +{ + // set up the LCD's number of columns and rows: + lcd.begin(LCD_COLS, LCD_ROWS); + +#ifdef BACKLIGHT_ON + lcd.backlight(); // make sure backlight is on with new library +#endif +} + +void loop() +{ +unsigned long etime; +char buf[8]; + + lcd.clear(); + + + /* + * Time an FPS test + */ + + etime = timeFPS(FPS_iter, LCD_COLS, LCD_ROWS); + + /* + * show the average single byte xfer time during the FPS test + */ + showByteXfer(etime); + + /* + * show FPS rate and Frame update time for this display + */ + + sprintf(buf, "%dx%d", LCD_COLS, LCD_ROWS); + showFPS(etime, buf); + +#ifdef iLCD + /* + * calculate Independent FPS and Frame update time + * (rate & time for a "standard" display - default of 16x2) + * This is simply a matter of scaling the time based on the + * ratio of the display sizes. + */ + + etime = etime *iLCD_ROWS * iLCD_COLS / LCD_ROWS / LCD_COLS; + + /* + * show independent FPS rate & Frame update time + */ + sprintf(buf, "%dx%d", iLCD_COLS, iLCD_ROWS); + showFPS(etime, buf); +#endif + +} + +unsigned long timeFPS(uint8_t iter, uint8_t cols, uint8_t rows) +{ +char c; +unsigned long stime, etime; + + stime = micros(); + for(c = '9'; c >= '0'; c--) // do not change this unless you change the FPS/ByteXfer calcuations as well + { + for(uint8_t i = 0; i < iter; i++) + { + for(uint8_t row = 0; row < rows; row++) + { + lcd.setCursor(0, row); + for(uint8_t col = 0; col< cols;col++) + { + lcd.write(c); + } + } + } + } + etime = micros(); + return((etime-stime)); +} +void showFPS(unsigned long etime, const char *type) +{ +float fps; + + + /* + * calculate Frame update time and FPS rate + * The 10.0 is for the 10 frames done per iteration + * one for each digit 0-9 + */ + + fps = (10.0 * FPS_iter) * 1000000.0/(etime); + + + lcd.clear(); + lcd.print(type); + lcd.print("FPS: "); + lcd.print(fps); + + if(LCD_ROWS > 1) + { + lcd.setCursor(0,1); + } + else + { + delay(DELAY_TIME); + lcd.clear(); + } + lcd.print("Ftime: "); + lcd.print((etime)/10.0/FPS_iter/1000); + lcd.print("ms"); + + delay(DELAY_TIME); +} +void showByteXfer(unsigned long etime) +{ + lcd.clear(); + lcd.print("ByteXfer: "); + /* + * Calculate average byte xfer time from time of FPS test + * This takes into consideration the set cursor position commands which + * are single byte commands and take the same amount of time as a data byte write. + * The final result is rounded up to an integer. + */ + lcd.print((int) (etime / (FPS_iter * (10.0 * (LCD_COLS * LCD_ROWS + LCD_ROWS)))+0.5)); + lcd.print("uS"); + + delay(DELAY_TIME); +} diff --git a/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt b/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt new file mode 100644 index 0000000..b59d013 --- /dev/null +++ b/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt @@ -0,0 +1,20 @@ +16Mhz AVR +Interface ByteXfer 16x2FPS Ftime +---------------------------------------------- +4BIT 338uS 86.92 11.51ms (orignal Liquid Crystal) +4BIT 98uS 298.58 3.35ms +SR2W 76uS 388.62 2.57ms +SR_2W 72uS 406.90 2.46ms +SR_3W 61uS 480.03 2.08ms +SR3W 102uS 287.92 3.47ms + + +80Mhz Pic32 (ChipKit Uno32) +Interface ByteXfer 16x2FPS Ftime +---------------------------------------------- +4BIT 232uS 126.73 7.89ms (orignal mpide Liquid Crystal) +4BIT 57uS 517.41 1.93ms +SR2W 53uS 557.35 1.79ms +SR_2W 53uS 554.66 1.80ms +SR_3W 50uS 591.40 1.69ms +SR3W 56uS 524.91 1.91ms diff --git a/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde b/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde new file mode 100644 index 0000000..ce21e1c --- /dev/null +++ b/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde @@ -0,0 +1,37 @@ +/* + * Displays text sent over the serial port (e.g. from the Serial Monitor) on + * an attached LCD. + */ +#include +#include + +#define BACKLIGHT_PIN 13 + +LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x38 + +void setup() +{ + pinMode ( BACKLIGHT_PIN, OUTPUT ); + lcd.begin (16,2); + digitalWrite ( BACKLIGHT_PIN, HIGH ); + + Serial.begin(57600); +} + +void loop() +{ + // when characters arrive over the serial port... + if (Serial.available()) + { + // wait a bit for the entire message to arrive + delay(100); + // clear the screen + lcd.clear(); + // read all the available characters + while (Serial.available() > 0) + { + // display each character to the LCD + lcd.write(Serial.read()); + } + } +} diff --git a/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde b/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde new file mode 100644 index 0000000..5eaad1f --- /dev/null +++ b/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde @@ -0,0 +1,246 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 1/1/12. +// Copyright 2011 - Under creative commons license: +// Attribution-NonCommercial-ShareAlike CC BY-NC-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file i2CLCDextraIO.pde +// Temperature logging to demonstrate the I2CLCDextraIO library. +// +// @brief This application is a demostration file for the I2CLCDextraIO library +// that reads a temperature from the internal ATMEGA328p temperature sensor +// and displays it on the LCD. The application also demonstrates some of the +// methods of the library, such as loading custom characters to the LCD, +// moving around the LCD, and writing to it. +// +// @author F. Malpartida +// --------------------------------------------------------------------------- +#include +#include + +#define _LCD_I2C_ + +#ifdef _LCD_I2C_ +#include +#endif + +#ifdef _LCD_4BIT_ +#include +#endif + + +/*! + @defined CHAR_WIDTH + @abstract Character witdth of the display, expressed in pixeles per character. +*/ +#define CHAR_WIDTH 5 + +/*! + @defined BACKLIGHT_PIN + @abstract LCD backlight pin definition. + @discussion AVR pin used for the backlight illumintation of the LCD. +*/ +#define BACKLIGHT_PIN 7 + +/*! + @defined TEMP_CAL_OFFSET + @abstract Temperature calibration offset. + @discussion This is the offset value that has to be modified to get a + correct temperature reading from the internal temperature sensor + of your AVR. +*/ +#define TEMP_CAL_OFFSET 334 + +/*! + @defined FILTER_ALP + @abstract Low pass filter alpha value + @discussion This value defines how much does the current reading, influences + the over all value. The smaller, the less influence the current + reading has over the overall result. +*/ +#define FILTER_ALP 0.1 + +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; + +#ifdef _LCD_I2C_ +LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x20 for a 16 chars and 2 line display +#endif + +#ifdef _LCD_4BIT_ +LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE); +#endif +const int CONTRAST_PIN = 9; +const int CONTRAST = 65; + + + +LCD *myLCD = &lcd; + +static double tempFilter; + + +/*! + @const charBitmap + @abstract Define Character bitmap for the bargraph. + @discussion Defines a character bitmap to represent a bargraph on a text + display. The bitmap goes from a blank character to full black. +*/ +const uint8_t charBitmap[][8] = { + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, + { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, + { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, + { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 }, + { 0xe, 0x11, 0x11, 0x11, 0xe, 0, 0, 0 }, + { 0x6, 0x9, 0x9, 0x6, 0x0, 0, 0, 0} +}; + +/*! + @function + @abstract Return available RAM memory + @discussion This routine returns the ammount of RAM memory available after + initialising the C runtime. + @param + @result Free RAM available. +*/ + +static int freeMemory() +{ + int free_memory; + + if((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + + return free_memory; +} + +/*! + @function + @abstract Returns AVR328p internal temperature + @discussion Configures the ADC MUX for the temperature ADC channel and + waits for conversion and returns the value of the ADC module + @result The internal temperature reading - in degrees C +*/ + +static int readTemperature() +{ + ADMUX = 0xC8; // activate interal temperature sensor, + // using 1.1V ref. voltage + ADCSRA |= _BV(ADSC); // start the conversion + while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion + // finishes + + // combine bytes & correct for temperature offset (approximate) + return ( (ADCL | (ADCH << 8)) - TEMP_CAL_OFFSET); +} + +/*! + @function + @abstract Braws a bargraph onto the display representing the value passed. + @discussion Draws a bargraph on the specified row using barLength characters. + @param value[in] Value to represent in the bargraph + @param row[in] Row of the LCD where to display the bargraph. Range (0, 1) + for this display. + @param barlength[in] Length of the bar, expressed in display characters. + @param start[in] Start bar character + @param end [in] End bar character + + @result None +*/ +static void drawBars ( int value, uint8_t row, uint8_t barLength, char start, + char end ) +{ + int numBars; + + // Set initial titles on the display + myLCD->setCursor (0, row); + myLCD->print (start); + + // Calculate the size of the bar + value = map ( value, -30, 50, 0, ( barLength ) * CHAR_WIDTH ); + numBars = value / CHAR_WIDTH; + + // Limit the size of the bargraph to barLength + if ( numBars > barLength ) + { + numBars = barLength; + } + myLCD->setCursor ( 1, row ); + + // Draw the bars + while ( numBars-- ) + { + myLCD->print ( char( 5 ) ); + } + + // Draw the fractions + numBars = value % CHAR_WIDTH; + myLCD->print ( char(numBars) ); + myLCD->setCursor (barLength + 1, row); + myLCD->print (end); + +} + +void setup () +{ + int i; + int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); + + Serial.begin ( 57600 ); + analogReference ( INTERNAL ); + +#ifdef _LCD_4BIT_ + pinMode(CONTRAST_PIN, OUTPUT); + lcd.backlight(); + digitalWrite(BACKLIGHT_PIN, HIGH); + analogWrite (CONTRAST_PIN, CONTRAST); +#else + pinMode ( BACKLIGHT_PIN, OUTPUT ); + digitalWrite(BACKLIGHT_PIN, HIGH); +#endif + + myLCD->begin ( 16, 2 ); + + // Load custom character set into CGRAM + for ( i = 0; i < charBitmapSize; i++ ) + { + myLCD->createChar ( i, (uint8_t *)charBitmap[i] ); + } + Serial.println ( freeMemory () ); + + myLCD->clear (); + myLCD->print ("Temp:"); + + tempFilter = readTemperature (); // Initialise the temperature Filter + +} + + +void loop () +{ + int temp; + + temp = readTemperature(); + tempFilter = ( FILTER_ALP * temp) + (( 1.0 - FILTER_ALP ) * tempFilter); + + myLCD->setCursor ( 8, 0 ); + myLCD->print (" "); + myLCD->setCursor ( 8, 0 ); + myLCD->print ( tempFilter, 1 ); + myLCD->setCursor ( 12, 0 ); + myLCD->print ( "\x07" ); + myLCD->print ("C"); + drawBars ( tempFilter, 1, 14, '-', '+' ); + + delay (200); +} diff --git a/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino b/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino new file mode 100644 index 0000000..f981507 --- /dev/null +++ b/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino @@ -0,0 +1,332 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 1/1/12. +// Copyright 2011 - Under creative commons license: +// Attribution-NonCommercial-ShareAlike CC BY-NC-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file i2CLCDextraIO_tempLeonardo.ino +// Temperature logging to demonstrate the I2CLCDextraIO library. +// +// @brief This application is a demostration file for the I2CLCDextraIO library +// that reads a temperature from the internal ATMEGA32U4 temperature sensor +// and displays it on the LCD. The application also demonstrates some of the +// methods of the library, such as loading custom characters to the LCD, +// moving around the LCD, and writing to it. +// +// @author F. Malpartida +// --------------------------------------------------------------------------- +#include +#include +#include + +#define _LCD_SR3W_ + +#ifdef _LCD_I2C_ +#include +#endif + +#ifdef _LCD_4BIT_ +#include +#endif + + +#ifdef _LCD_SR_ +#include +#endif + +#ifdef _LCD_SR3W_ +#include +#endif + + +/*! + @defined CHAR_WIDTH + @abstract Character witdth of the display, expressed in pixeles per character. +*/ +#define CHAR_WIDTH 5 + +/*! + @defined BACKLIGHT_PIN + @abstract LCD backlight pin definition. + @discussion AVR pin used for the backlight illumintation of the LCD. +*/ +#define BACKLIGHT_PIN 12 + +/*! + @defined STATUS_PIN + @abstract Status LED indicator. + @discussion Activity LED blinking indicating that the system is up. +*/ +#define STATUS_PIN 13 + +/*! + @defined LOOP_DELAY + @abstract Main loop delay. + @discussion Main loop delay executing temperature readings and LCD updates. +*/ +#define LOOP_DELAY 300 + +/*! + @defined TEMP_CAL_OFFSET + @abstract Temperature calibration offset. + @discussion This is the offset value that has to be modified to get a + correct temperature reading from the internal temperature sensor + of your AVR. +*/ +#define TEMP_CAL_OFFSET 282 + +/*! + @defined FILTER_ALP + @abstract Low pass filter alpha value + @discussion This value defines how much does the current reading, influences + the over all value. The smaller, the less influence the current + reading has over the overall result. +*/ +#define FILTER_ALP 0.1 + +/*! + @defined MIN_TEMP + @abstract Minimum temperature range for bargraph + +*/ +#define MIN_TEMP -10 + +/*! + @defined MAX_TEMP + @abstract Maximum temperature range for bargraph + +*/ +#define MAX_TEMP 50 + +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; + + +// Initialise LCD module +// ----------------------------------------------------------------------------- +#ifdef _LCD_I2C_ +LiquidCrystal_I2C lcd(0x38); +#endif + +#ifdef _LCD_4BIT_ +LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE); +const int CONTRAST_PIN = 9; +const int CONTRAST = 65; +#endif + +#ifdef _LCD_SR_ +LiquidCrystal_SR lcd(3,2,TWO_WIRE); +// | | +// | \-- Clock Pin +// \---- Data/Enable Pin +#endif + +#ifdef _LCD_SR3W_ +LiquidCrystal_SR3W lcd(3, 2, 4); +// | | +// | \-- Clock Pin +// \---- Data/Enable Pin +#endif + + +// LCD reference variable +LCD *myLCD = &lcd; + +// Temperature filter variable +static double tempFilter; + +/*! + @const charBitmap + @abstract Define Character bitmap for the bargraph. + @discussion Defines a character bitmap to represent a bargraph on a text + display. The bitmap goes from a blank character to full black. +*/ +const uint8_t charBitmap[][8] = { + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, + { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, + { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, + { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 }, + { 0xe, 0x11, 0x11, 0x11, 0xe, 0, 0, 0 }, + { 0x6, 0x9, 0x9, 0x6, 0x0, 0, 0, 0} +}; + +/*! + @function + @abstract Return available RAM memory + @discussion This routine returns the ammount of RAM memory available after + initialising the C runtime. + @param + @result Free RAM available. +*/ +static int freeMemory() +{ + int free_memory; + + if((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + + return free_memory; +} + +/*! + @function + @abstract Returns AVR328p internal temperature + @discussion Configures the ADC MUX for the temperature ADC channel and + waits for conversion and returns the value of the ADC module + @result The internal temperature reading - in degrees C +*/ + +static int readTemperature() +{ + ADMUX = 0xC7; // activate interal temperature sensor, + // using 2.56V ref. voltage + ADCSRB |= _BV(MUX5); + + ADCSRA |= _BV(ADSC); // start the conversion + while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion + // finishes + + // combine bytes & correct for temperature offset (approximate) + return ( (ADCL | (ADCH << 8)) - TEMP_CAL_OFFSET); +} + +/*! + @function + @abstract Braws a bargraph onto the display representing the value passed. + @discussion Draws a bargraph on the specified row using barLength characters. + @param value[in] Value to represent in the bargraph + @param row[in] Row of the LCD where to display the bargraph. Range (0, 1) + for this display. + @param barlength[in] Length of the bar, expressed in display characters. + @param start[in] Start bar character + @param end [in] End bar character + + @result None +*/ +static void drawBars ( int value, uint8_t row, uint8_t barLength, char start, + char end ) +{ + int numBars; + + // Set initial titles on the display + myLCD->setCursor (0, row); + myLCD->print (start); + + // Calculate the size of the bar + value = map ( value, MIN_TEMP, MAX_TEMP, 0, ( barLength ) * CHAR_WIDTH ); + numBars = value / CHAR_WIDTH; + + // Limit the size of the bargraph to barLength + if ( numBars > barLength ) + { + numBars = barLength; + } + myLCD->setCursor ( 1, row ); + + // Draw the bars + while ( numBars-- ) + { + myLCD->print ( char( 5 ) ); + } + + // Draw the fractions + numBars = value % CHAR_WIDTH; + myLCD->print ( char(numBars) ); + myLCD->setCursor (barLength + 1, row); + myLCD->print (end); + +} + +/*! + @function + @abstract Initialise the HW + @discussion Initialise the HW used within this application: UART, LCD & IOs + @param + @result +*/ + +static void initHW ( void ) +{ + int i; + int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); + + Serial.begin ( 57600 ); + + // Hardware initialise + // ------------------------------------ + + //ADCSRA |= (1 << ADEN); // Initialise ADC block (no need done by env) + + // Initialise LCD HW: backlight and LCD + // ------------------------------------- +#ifdef _LCD_4BIT_ + pinMode(CONTRAST_PIN, OUTPUT); + analogWrite (CONTRAST_PIN, CONTRAST); +#endif + +#ifdef _LCD_I2C_ + pinMode ( BACKLIGHT_PIN, OUTPUT ); + digitalWrite (BACKLIGHT_PIN, HIGH); +#endif + pinMode ( STATUS_PIN, OUTPUT ); + + myLCD->begin ( 20, 2 ); + // Load custom character set into CGRAM + // -------------------------------------------------------------------- + for ( i = 0; i < charBitmapSize; i++ ) + { + myLCD->createChar ( i, (uint8_t *)charBitmap[i] ); + } +} + +void setup () +{ + initHW(); + + Serial.println ( freeMemory () ); + myLCD->clear (); + myLCD->print ( F("Free Mem: ")); + myLCD->print ( freeMemory () ); + delay ( 2000 ); + myLCD->clear (); + myLCD->print (F("Temp:")); + myLCD->setCursor ( 8, 0 ); + + tempFilter = 0; + myLCD->print ( readTemperature() ); +} + + +void loop () +{ + int temp; + static byte status = 1; + + status ^= 1; + digitalWrite ( STATUS_PIN, status); + + temp = readTemperature(); + tempFilter = ( FILTER_ALP * temp) + (( 1.0 - FILTER_ALP ) * tempFilter); + + // Display the information to the LCD + myLCD->setCursor ( 8, 0 ); + myLCD->print (" "); + myLCD->setCursor ( 8, 0 ); + myLCD->print ( tempFilter, 1 ); + myLCD->setCursor ( 12, 0 ); + myLCD->print ( "\x07" ); + myLCD->print ("C"); + drawBars ( tempFilter, 1, 14, '-', '+' ); + + delay (LOOP_DELAY); +} \ No newline at end of file diff --git a/LiquidCrystal/examples/performanceLCD/performanceLCD.pde b/LiquidCrystal/examples/performanceLCD/performanceLCD.pde new file mode 100644 index 0000000..dea6c50 --- /dev/null +++ b/LiquidCrystal/examples/performanceLCD/performanceLCD.pde @@ -0,0 +1,480 @@ +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file performanceLCD.h +// This sketch implements a simple benchmark for the New LiquidCrystal library. +// +// @brief +// This sketch provides a simple benchmark for the New LiquidCrystal library. It +// enables to test the varios classes provided by the library giving a performance +// reference. +// +// This library is only compatible with Arduino's SDK version 1.0 +// +// @version API 1.0.0 +// +// @author F. Malpartida - fmalpartida@gmail.com +// Contribution by flo - Florian@Fida.biz - for benchmarking SR +// --------------------------------------------------------------------------- +#include + +#define _LCD_I2C_ + +#ifdef _LCD_I2C_ +#include +#endif + +#ifdef _LCD_4BIT_ +#include +#endif + +#ifdef _LCD_SR_ +#include +#endif + +#ifdef _LCD_SR3W_ +#include +#endif + +#ifdef _LCD_SR1_ +#include +#endif + +// C runtime variables +// ------------------- +#ifdef __AVR__ +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; +#endif + +// Constants and definitions +// ------------------------- +// Definitions for compatibility with Arduino SDK prior to version 1.0 +#ifndef F +#define F(str) str +#endif + +/*! + @defined NUM_BENCHMARKS + @abstract Number of benchmarks in the project. + */ +#define NUM_BENCHMARKS 4 + +/*! + @defined ITERATIONS + @abstract Number of benchmarks iterations to perform. + */ +#define ITERATIONS 10 + +/*! + @defined LCD_ROWS + @abstract LCD rows + @discussion Defines the number of rows that the LCD has, normal LCD ranges are (1, 2, 4). + */ +#define LCD_ROWS 2 + +/*! + @defined LCD_COLUMNS + @abstract LCD available columns + @discussion Defines the number of colums that the LCD has, normal LCD ranges are (8, 16, 20). + */ +#define LCD_COLUMNS 16 + +/*! + @const Pin constant definitions + @abstract Define several constants required to manage the LCD backlight and contrast + */ +#ifdef _LCD_I2C_ +const int BACKLIGHT_PIN = 12; +const int CONTRAST_PIN = 0; // none +const int CONTRAST = 0; // none +#endif + +#ifdef _LCD_4BIT_ +const int CONTRAST_PIN = 9; +const int BACKLIGHT_PIN = 7; +const int CONTRAST = 120; +#endif + +#ifdef _LCD_SR_ +const int CONTRAST_PIN = 0; // not connected +const int BACKLIGHT_PIN = 0; // none +const int CONTRAST = 0; +#endif + +#ifdef _LCD_SR1_ +const int CONTRAST_PIN = 0; // not connected +const int BACKLIGHT_PIN = 0; // none +const int CONTRAST = 0; +#endif + +#ifdef _LCD_SR3W_ +const int CONTRAST_PIN = 0; // none +const int BACKLIGHT_PIN = 5; +const int CONTRAST = 0; +#endif + +/*! + @const charBitmap + @abstract Define Character bitmap for the bargraph. + @discussion Defines a character bitmap to represent a bargraph on a text + display. The bitmap goes from a blank character to full black. + */ +const uint8_t charBitmap[][8] = { + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, + { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, + { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, + { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 } +}; + +/*! + @typedef t_benchmarkOp + @abstract Function pointer associated to each benchmark. + */ +typedef long (*t_benchmarkOp)( uint8_t ); + +/*! + @typedef t_timeBenchMarks + @abstract Structure to store results of the execution time of the benchmark. + @field benchmark: function pointer of the benchmark to be executed. + */ +typedef struct +{ + t_benchmarkOp benchmark; /**< Function pointer associated to the benchmark */ + long benchTime; /**< execution time for benchmark 1 in useconds */ + uint16_t numWrites; /**< Number of write cycles of the benchmark */ +} t_benchMarks; + + +// Main LCD objects +// ---------------- +#ifdef _LCD_I2C_ +LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x20 for a 16 chars and 2 line display +#endif + +#ifdef _LCD_4BIT_ +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); +#endif + +#ifdef _LCD_SR_ +LiquidCrystal_SR lcd(8,7,TWO_WIRE); +#endif + +#ifdef _LCD_SR1_ +LiquidCrystal_SR1 lcd(2); +#endif + +#ifdef _LCD_SR3W_ +LiquidCrystal_SR3W lcd(3, 2, 4); +#endif + +// benchMarks definitions +// ---------------------- +extern long benchmark1 ( uint8_t ); +extern long benchmark2 ( uint8_t ); +extern long benchmark3 ( uint8_t ); +extern long benchmark4 ( uint8_t ); + +//! @brief benchmark structure that will be initialised and +static t_benchMarks myBenchMarks[NUM_BENCHMARKS] = +{ + { benchmark1, 0, (LCD_ROWS * LCD_COLUMNS) + 2 }, + { benchmark2, 0, LCD_ROWS * LCD_COLUMNS * 6 * 2 }, + { benchmark3, 0, 40 + 2 }, + { benchmark4, 0, 40 + 2 } +}; + +// Static methods +// -------------- +/*! + @function freeMemory + @abstract Return available RAM memory + @discussion This routine returns the ammount of RAM memory available after + initialising the C runtime. + @param + @return Free RAM available, -1 for non AVR microcontrollers + */ +static int freeMemory ( void ) +{ +#ifdef __AVR__ + int free_memory; + + if((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + + return free_memory; +#else + return -1; +#endif + +} + +/*! + @function LCDSetup + @abstract Initialise LCD associated pins and initialise the LCD object + with its geometry. + @discussion Initialise the LCD object and make it ready for operation by + setting up the LCD geometry, i.e. LCD character size. Initialise + and configure all associated control pins such as backlight and + contras pin if necessary. + + @param[in] charBitmapSize: contrasts pin associated to the contrast (should be an + analog pin). 0 if contrast pin is not required. + @param[in] backlight: backlight pin associated to the LCD backlight. + @param[in] cols: number of LCD columns normal values (1, 2, 4) + @param[in] rows: number of LCD rows normal values (8, 16, 20) + */ +static void LCDSetup ( uint8_t contrasPin, uint8_t backlight, uint8_t cols, uint8_t rows ) +{ + // If our setup uses a PWM to control the backlight, configure it + // -------------------------------------------------------------- + if ( contrasPin != 0 ) + { + pinMode ( contrasPin, OUTPUT ); + analogWrite ( contrasPin, CONTRAST ); + } + // Setup backlight pin + if ( backlight != 0 ){ + pinMode(backlight, OUTPUT); + digitalWrite(backlight, HIGH); + } + + lcd.begin ( cols, rows ); + lcd.clear ( ); +} + + +/*! + @function LCDLoadCharacters + @abstract Loads onto the LCD the character set for the benchmark. + @discussion Loads onto the LCD the character set that will be used throughout + the benchmark. + + @param[in] charBitmapSize: number of characters to load to the LCD. + */ +static void LCDLoadCharacters ( int numChars ) +{ + // Load custom character set into CGRAM + for ( int i = 0; i < numChars; i++ ) + { + lcd.createChar ( i, (uint8_t *)charBitmap[i] ); + } +} + + +// Benchmarks +// ---------- +/*! + @function benchmark1 + @abstract writes to the LCD a full set of characters loaded on the LCD + memory. + @discussion Writes to all the positions of the LCD a fixed pattern from + memory. For every line it writes, it positions the cursor. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark1 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i, j; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + for ( i = 0; i < LCD_ROWS; i++ ) + { + lcd.setCursor ( 0, i ); + for ( j = 0; j < LCD_COLUMNS; j++ ) + { + lcd.print (char(5)); + } + } + totalTime += ( micros() - time ); + delay ( 200 ); // it doesn't keep up with the LCD refresh rate. + iterations--; + } + return ( totalTime ); +} + +/*! + @function benchmark2 + @abstract writes to the LCD a full set of characters loaded on the LCD + memory one line pixel at the time + @discussion Writes to all the positions of the LCD a fixed pattern from + memory each patern take 6 write operations to the LCD. For every + character it writes it sets the cursor possition. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS * 6. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark2 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i, j, k; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + + for ( i = 0; i < LCD_ROWS; i++ ) + { + for ( j = 0; j < LCD_COLUMNS; j++ ) + { + for ( k = 0; k <= 5; k++ ) + { + lcd.setCursor ( j, i ); + lcd.print (char(k)); + } + } + } + totalTime += ( micros() - time ); + iterations--; + } + return ( totalTime ); +} + +/*! + @function benchmark3 + @abstract writes to the LCD a full set of characters from memory. + @discussion Writes to all the positions of the LCD a fixed pattern from + RAM. For every line it writes, it positions the cursor. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark3 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + for ( i = 0; i < LCD_ROWS; i++ ) + { + lcd.setCursor ( 0, i ); + lcd.print ( "####################" ); + } + totalTime += ( micros() - time ); + delay ( 200 ); // it doesn't keep up with the LCD refresh rate. + iterations--; + } + return ( totalTime ); +} + +/*! + @function benchmark4 + @abstract writes to the LCD a full set of characters from memory. + @discussion Writes to all the positions of the LCD a fixed pattern from + flash. For every line it writes, it positions the cursor. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark4 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + for ( i = 0; i < LCD_ROWS; i++ ) + { + lcd.setCursor ( 0, i ); + lcd.print ( F("####################") ); + } + totalTime += ( micros() - time ); + delay ( 200 ); // it doesn't keep up with the LCD refresh rate. + iterations--; + } + return ( totalTime ); +} + +// Main system setup +// ----------------- +void setup () +{ + Serial.begin ( 57600 ); +#ifdef __AVR__ + Serial.print ( F("Free mem: ") ); + Serial.println ( freeMemory () ); +#endif + + // Initialise the LCD + LCDSetup ( CONTRAST_PIN, BACKLIGHT_PIN, LCD_COLUMNS, LCD_ROWS ); + LCDLoadCharacters ( (sizeof(charBitmap ) / sizeof (charBitmap[0])) ); +} + + +// Main system loop +// ---------------- +void loop () +{ + int i; + + lcd.setCursor ( 0, 0 ); + lcd.clear ( ); + + // Run benchmark + for ( i = 0; i < NUM_BENCHMARKS; i++ ) + { + myBenchMarks[i].benchTime = + (myBenchMarks[i].benchmark (ITERATIONS))/ITERATIONS; + Serial.println (i); + } + + float fAllWrites=0.0; + + for ( i = 0; i < NUM_BENCHMARKS; i++ ) + { + Serial.print ( F("benchmark") ); + Serial.print ( i ); + Serial.print ( F(": ") ); + Serial.print ( myBenchMarks[i].benchTime ); + Serial.print ( F(" us - ") ); + Serial.print ( F(" write: ") ); + Serial.print ( myBenchMarks[i].benchTime / (float)myBenchMarks[i].numWrites ); + Serial.println ( F(" us") ); + fAllWrites += myBenchMarks[i].benchTime / (float)myBenchMarks[i].numWrites; + } + Serial.print( F("avg. write: ") ); + Serial.println( fAllWrites / (float)NUM_BENCHMARKS ); + } \ No newline at end of file diff --git a/LiquidCrystal/keywords.txt b/LiquidCrystal/keywords.txt new file mode 100644 index 0000000..c13f5ae --- /dev/null +++ b/LiquidCrystal/keywords.txt @@ -0,0 +1,52 @@ +########################################### +# Syntax Coloring Map For LiquidCrystal_I2C +########################################### + +########################################### +# Datatypes (KEYWORD1) +########################################### + +LiquidCrystal_SR KEYWORD1 +LiquidCrystal_I2C KEYWORD1 +LiquidCrystal_SR3W KEYWORD1 +LiquidCrystal KEYWORD1 +LCD KEYWORD1 + +########################################### +# Methods and Functions (KEYWORD2) +########################################### +begin KEYWORD2 +clear KEYWORD2 +home KEYWORD2 +noDisplay KEYWORD2 +display KEYWORD2 +noBlink KEYWORD2 +blink KEYWORD2 +noCursor KEYWORD2 +cursor KEYWORD2 +scrollDisplayLeft KEYWORD2 +scrollDisplayRight KEYWORD2 +leftToRight KEYWORD2 +rightToLeft KEYWORD2 +moveCursorLeft KEYWORD2 +moveCursorRight KEYWORD2 +autoscroll KEYWORD2 +noAutoscroll KEYWORD2 +createChar KEYWORD2 +setCursor KEYWORD2 +print KEYWORD2 +write KEYWORD2 +println KEYWORD2 +backlight KEYWORD2 +noBacklight KEYWORD2 +on KEYWORD2 +off KEYWORD2 +setBacklightPin KEYWORD2 +setBacklight KEYWORD2 +########################################### +# Constants (LITERAL1) +########################################### +POSITIVE LITERAL1 +NEGATIVE LITERAL1 +BACKLIGHT_ON LITERAL1 +BACKLIGHT_OFF LITERAL1 \ No newline at end of file