uint8_t u8g_com_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) { switch(msg) { case U8G_COM_MSG_INIT: //u8g_com_arduino_digital_write(u8g, U8G_PI_SCL, HIGH); //u8g_com_arduino_digital_write(u8g, U8G_PI_SDA, HIGH); //u8g_a0_state = 0; /* inital RS state: unknown mode */ i2c_init(); break; case U8G_COM_MSG_STOP: break; case U8G_COM_MSG_RESET: break; case U8G_COM_MSG_CHIP_SELECT: u8g_a0_state = 0; u8g_set_a0 = 1; /* force a0 to set again, also forces start condition */ if ( arg_val == 0 ) { /* disable chip, send stop condition */ i2c_stop(); } else { /* enable, do nothing: any byte writing will trigger the i2c start */ } break; case U8G_COM_MSG_WRITE_BYTE: //u8g_set_a0 = 1; u8g_com_ssd_start_sequence(u8g); i2c_write_byte(arg_val); break; case U8G_COM_MSG_WRITE_SEQ_P: case U8G_COM_MSG_WRITE_SEQ: //u8g_set_a0 = 1; u8g_com_ssd_start_sequence(u8g); { register uint8_t *ptr = arg_ptr; while( arg_val > 0 ) { i2c_write_byte(*ptr++); arg_val--; } } // lpc81x_i2c_stop(); break; case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */ u8g_a0_state = arg_val; u8g_set_a0 = 1; /* force a0 to set again */ break; } return 1; }
/*--------------------------------------------------------------------------- TITLE : u8g_com_sw_i2c_fn WORK : ARG : void RET : void ---------------------------------------------------------------------------*/ uint8_t u8g_com_sw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) { switch(msg) { case U8G_COM_MSG_STOP: break; case U8G_COM_MSG_INIT: //-- I2C 초기화 // I2C_SW_Init(NULL); I2C_Stop(); break; case U8G_COM_MSG_CHIP_SELECT: U8G_SSD_A0_STATE = 0; U8G_SSD_A0_SET = 1; if( arg_val == 0 ) { I2C_Stop(); } break; case U8G_COM_MSG_RESET: break; case U8G_COM_MSG_WRITE_BYTE: if ( u8g_com_ssd_start_sequence(u8g) == 0 ) { I2C_Stop(); return 0; } I2C_SendByte(arg_val); I2C_NoAck(); break; case U8G_COM_MSG_WRITE_SEQ: if ( u8g_com_ssd_start_sequence(u8g) == 0 ) { I2C_Stop(); return 0; } { register uint8_t *ptr = arg_ptr; while( arg_val > 0 ) { I2C_SendByte(*ptr++); I2C_NoAck(); arg_val--; } } break; case U8G_COM_MSG_WRITE_SEQ_P: if ( u8g_com_ssd_start_sequence(u8g) == 0 ) { I2C_Stop(); return 0; } { register uint8_t *ptr = arg_ptr; while( arg_val > 0 ) { I2C_SendByte(*ptr); I2C_NoAck(); ptr++; arg_val--; } } break; case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */ U8G_SSD_A0_STATE = arg_val; U8G_SSD_A0_SET = 1; break; } return 1; }