#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"

#define I2C_SCL PICO_DEFAULT_I2C_SCL_PIN
#define I2C_SDA PICO_DEFAULT_I2C_SDA_PIN

#define SSD1306_ADDR    0x3C
#define SSD1306_CB_CONTINUE 0x80

#define SSD1306_SET_DISP_OFF    0xAE    // Sleepモードに
#define SSD1306_SET_DISP_ON     0xAF    // Normalモードに

int main()
{
    stdio_init_all();
    // I2C0を400kbpsで初期化
    i2c_init(i2c0, 400*1000);
    // ピンをI2Cに割り当て   
    gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
    gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);

    gpio_disable_pulls(I2C_SDA);
    gpio_disable_pulls(I2C_SCL);
    // 外付けでプルアップした場合次の2行をコメントアウト
    gpio_pull_up(I2C_SDA);
    gpio_pull_up(I2C_SCL);

    uint8_t cmd_buf[2] = {0x80, SSD1306_SET_DISP_OFF};
    int ret;

    ret = i2c_write_blocking(i2c0, SSD1306_ADDR, cmd_buf, sizeof(cmd_buf),false );
    if(ret != sizeof(cmd_buf)) {
        printf("I2C Error\n");
    }
    sleep_ms(2000);
    cmd_buf[1] = SSD1306_SET_DISP_ON;
    ret = i2c_write_blocking(i2c0, SSD1306_ADDR, cmd_buf, sizeof(cmd_buf),false );
    if(ret != sizeof(cmd_buf)) {
        printf("I2C Error\n");
    }

    while (true) {
        tight_loop_contents();
    }
}
