hadif azli / Mbed 2 deprecated TEST123

Dependencies:   mbed Blynk

Committer:
lixianyu
Date:
Mon Jun 13 02:21:11 2016 +0000
Revision:
1:0e75de2a5d21
Parent:
0:d8f4c441e032
u8glib???????????????????????????Adafruit_GFX????OLED????????bitmap??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:d8f4c441e032 1 /*
lixianyu 0:d8f4c441e032 2 Special pin usage:
lixianyu 0:d8f4c441e032 3 U8G_PI_I2C_OPTION additional options
lixianyu 0:d8f4c441e032 4 U8G_PI_A0_STATE used to store the last value of the command/data register selection
lixianyu 0:d8f4c441e032 5 U8G_PI_SET_A0 1: Signal request to update I2C device with new A0_STATE, 0: Do nothing, A0_STATE matches I2C device
lixianyu 0:d8f4c441e032 6 U8G_PI_SCL clock line (NOT USED)
lixianyu 0:d8f4c441e032 7 U8G_PI_SDA data line (NOT USED)
lixianyu 0:d8f4c441e032 8
lixianyu 0:d8f4c441e032 9 U8G_PI_RESET reset line (currently disabled, see below)
lixianyu 0:d8f4c441e032 10
lixianyu 0:d8f4c441e032 11 Protocol:
lixianyu 0:d8f4c441e032 12 SLA, Cmd/Data Selection, Arguments
lixianyu 0:d8f4c441e032 13 The command/data register is selected by a special instruction byte, which is sent after SLA
lixianyu 0:d8f4c441e032 14
lixianyu 0:d8f4c441e032 15 The continue bit is always 0 so that a (re)start is equired for the change from cmd to/data mode
lixianyu 0:d8f4c441e032 16 */
lixianyu 0:d8f4c441e032 17
lixianyu 0:d8f4c441e032 18 #include "u8g.h"
lixianyu 0:d8f4c441e032 19
lixianyu 0:d8f4c441e032 20 #if defined(U8G_RASPBERRY_PI)
lixianyu 0:d8f4c441e032 21
lixianyu 0:d8f4c441e032 22 #include <wiringPi.h>
lixianyu 0:d8f4c441e032 23 #include <wiringPiI2C.h>
lixianyu 0:d8f4c441e032 24 #include <stdio.h>
lixianyu 0:d8f4c441e032 25 #include <stdlib.h>
lixianyu 0:d8f4c441e032 26 #include <errno.h>
lixianyu 0:d8f4c441e032 27
lixianyu 0:d8f4c441e032 28 #define I2C_SLA 0x3c
lixianyu 0:d8f4c441e032 29 #define I2C_CMD_MODE 0x000
lixianyu 0:d8f4c441e032 30 #define I2C_DATA_MODE 0x040
lixianyu 0:d8f4c441e032 31
lixianyu 0:d8f4c441e032 32 #if defined(U8G_WITH_PINLIST)
lixianyu 0:d8f4c441e032 33
lixianyu 0:d8f4c441e032 34 uint8_t u8g_com_raspberrypi_ssd_start_sequence(u8g_t *u8g)
lixianyu 0:d8f4c441e032 35 {
lixianyu 0:d8f4c441e032 36 /* are we requested to set the a0 state? */
lixianyu 0:d8f4c441e032 37 if ( u8g->pin_list[U8G_PI_SET_A0] == 0 )
lixianyu 0:d8f4c441e032 38 return 1;
lixianyu 0:d8f4c441e032 39
lixianyu 0:d8f4c441e032 40 /* setup bus, might be a repeated start */
lixianyu 0:d8f4c441e032 41 if ( u8g_i2c_start(I2C_SLA) == 0 )
lixianyu 0:d8f4c441e032 42 return 0;
lixianyu 0:d8f4c441e032 43 if ( u8g->pin_list[U8G_PI_A0_STATE] == 0 )
lixianyu 0:d8f4c441e032 44 {
lixianyu 0:d8f4c441e032 45 if ( u8g_i2c_send_mode(I2C_CMD_MODE) == 0 )
lixianyu 0:d8f4c441e032 46 return 0;
lixianyu 0:d8f4c441e032 47 }
lixianyu 0:d8f4c441e032 48 else
lixianyu 0:d8f4c441e032 49 {
lixianyu 0:d8f4c441e032 50 if ( u8g_i2c_send_mode(I2C_DATA_MODE) == 0 )
lixianyu 0:d8f4c441e032 51 return 0;
lixianyu 0:d8f4c441e032 52 }
lixianyu 0:d8f4c441e032 53
lixianyu 0:d8f4c441e032 54
lixianyu 0:d8f4c441e032 55 u8g->pin_list[U8G_PI_SET_A0] = 0;
lixianyu 0:d8f4c441e032 56 return 1;
lixianyu 0:d8f4c441e032 57 }
lixianyu 0:d8f4c441e032 58
lixianyu 0:d8f4c441e032 59 uint8_t u8g_com_raspberrypi_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
lixianyu 0:d8f4c441e032 60 {
lixianyu 0:d8f4c441e032 61 switch(msg)
lixianyu 0:d8f4c441e032 62 {
lixianyu 0:d8f4c441e032 63 case U8G_COM_MSG_INIT:
lixianyu 0:d8f4c441e032 64 u8g_i2c_init(u8g->pin_list[U8G_PI_I2C_OPTION]);
lixianyu 0:d8f4c441e032 65 u8g_SetPIOutput(u8g, U8G_PI_RESET);
lixianyu 0:d8f4c441e032 66 u8g_SetPIOutput(u8g, U8G_PI_A0);
lixianyu 0:d8f4c441e032 67 break;
lixianyu 0:d8f4c441e032 68
lixianyu 0:d8f4c441e032 69 case U8G_COM_MSG_STOP:
lixianyu 0:d8f4c441e032 70 break;
lixianyu 0:d8f4c441e032 71
lixianyu 0:d8f4c441e032 72 case U8G_COM_MSG_RESET:
lixianyu 0:d8f4c441e032 73 break;
lixianyu 0:d8f4c441e032 74
lixianyu 0:d8f4c441e032 75 case U8G_COM_MSG_CHIP_SELECT:
lixianyu 0:d8f4c441e032 76 u8g->pin_list[U8G_PI_A0_STATE] = 0;
lixianyu 0:d8f4c441e032 77 u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again, also forces start condition */
lixianyu 0:d8f4c441e032 78 if ( arg_val == 0 )
lixianyu 0:d8f4c441e032 79 {
lixianyu 0:d8f4c441e032 80 /* disable chip, send stop condition */
lixianyu 0:d8f4c441e032 81 u8g_i2c_stop();
lixianyu 0:d8f4c441e032 82 }
lixianyu 0:d8f4c441e032 83 else
lixianyu 0:d8f4c441e032 84 {
lixianyu 0:d8f4c441e032 85 /* enable, do nothing: any byte writing will trigger the i2c start */
lixianyu 0:d8f4c441e032 86 }
lixianyu 0:d8f4c441e032 87 break;
lixianyu 0:d8f4c441e032 88
lixianyu 0:d8f4c441e032 89 case U8G_COM_MSG_WRITE_BYTE:
lixianyu 0:d8f4c441e032 90 //u8g->pin_list[U8G_PI_SET_A0] = 1;
lixianyu 0:d8f4c441e032 91 if ( u8g_com_raspberrypi_ssd_start_sequence(u8g) == 0 )
lixianyu 0:d8f4c441e032 92 return u8g_i2c_stop(), 0;
lixianyu 0:d8f4c441e032 93 if ( u8g_i2c_send_byte(arg_val) == 0 )
lixianyu 0:d8f4c441e032 94 return u8g_i2c_stop(), 0;
lixianyu 0:d8f4c441e032 95 // u8g_i2c_stop();
lixianyu 0:d8f4c441e032 96 break;
lixianyu 0:d8f4c441e032 97
lixianyu 0:d8f4c441e032 98 case U8G_COM_MSG_WRITE_SEQ:
lixianyu 0:d8f4c441e032 99 //u8g->pin_list[U8G_PI_SET_A0] = 1;
lixianyu 0:d8f4c441e032 100 if ( u8g_com_raspberrypi_ssd_start_sequence(u8g) == 0 )
lixianyu 0:d8f4c441e032 101 return u8g_i2c_stop(), 0;
lixianyu 0:d8f4c441e032 102 {
lixianyu 0:d8f4c441e032 103 register uint8_t *ptr = (uint8_t *)arg_ptr;
lixianyu 0:d8f4c441e032 104 while( arg_val > 0 )
lixianyu 0:d8f4c441e032 105 {
lixianyu 0:d8f4c441e032 106 if ( u8g_i2c_send_byte(*ptr++) == 0 )
lixianyu 0:d8f4c441e032 107 return u8g_i2c_stop(), 0;
lixianyu 0:d8f4c441e032 108 arg_val--;
lixianyu 0:d8f4c441e032 109 }
lixianyu 0:d8f4c441e032 110 }
lixianyu 0:d8f4c441e032 111 // u8g_i2c_stop();
lixianyu 0:d8f4c441e032 112 break;
lixianyu 0:d8f4c441e032 113
lixianyu 0:d8f4c441e032 114 case U8G_COM_MSG_WRITE_SEQ_P:
lixianyu 0:d8f4c441e032 115 //u8g->pin_list[U8G_PI_SET_A0] = 1;
lixianyu 0:d8f4c441e032 116 if ( u8g_com_raspberrypi_ssd_start_sequence(u8g) == 0 )
lixianyu 0:d8f4c441e032 117 return u8g_i2c_stop(), 0;
lixianyu 0:d8f4c441e032 118 {
lixianyu 0:d8f4c441e032 119 register uint8_t *ptr = (uint8_t *)arg_ptr;
lixianyu 0:d8f4c441e032 120 while( arg_val > 0 )
lixianyu 0:d8f4c441e032 121 {
lixianyu 0:d8f4c441e032 122 if ( u8g_i2c_send_byte(u8g_pgm_read(ptr)) == 0 )
lixianyu 0:d8f4c441e032 123 return 0;
lixianyu 0:d8f4c441e032 124 ptr++;
lixianyu 0:d8f4c441e032 125 arg_val--;
lixianyu 0:d8f4c441e032 126 }
lixianyu 0:d8f4c441e032 127 }
lixianyu 0:d8f4c441e032 128 // u8g_i2c_stop();
lixianyu 0:d8f4c441e032 129 break;
lixianyu 0:d8f4c441e032 130
lixianyu 0:d8f4c441e032 131 case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
lixianyu 0:d8f4c441e032 132 u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
lixianyu 0:d8f4c441e032 133 u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again */
lixianyu 0:d8f4c441e032 134
lixianyu 0:d8f4c441e032 135 #ifdef OLD_CODE
lixianyu 0:d8f4c441e032 136 if ( i2c_state != 0 )
lixianyu 0:d8f4c441e032 137 {
lixianyu 0:d8f4c441e032 138 u8g_i2c_stop();
lixianyu 0:d8f4c441e032 139 i2c_state = 0;
lixianyu 0:d8f4c441e032 140 }
lixianyu 0:d8f4c441e032 141
lixianyu 0:d8f4c441e032 142 if ( u8g_com_raspberrypi_ssd_start_sequence(arg_val) == 0 )
lixianyu 0:d8f4c441e032 143 return 0;
lixianyu 0:d8f4c441e032 144
lixianyu 0:d8f4c441e032 145 /* setup bus, might be a repeated start */
lixianyu 0:d8f4c441e032 146 /*
lixianyu 0:d8f4c441e032 147 if ( u8g_i2c_start(I2C_SLA) == 0 )
lixianyu 0:d8f4c441e032 148 return 0;
lixianyu 0:d8f4c441e032 149 if ( arg_val == 0 )
lixianyu 0:d8f4c441e032 150 {
lixianyu 0:d8f4c441e032 151 i2c_state = 1;
lixianyu 0:d8f4c441e032 152
lixianyu 0:d8f4c441e032 153 if ( u8g_i2c_send_byte(I2C_CMD_MODE) == 0 )
lixianyu 0:d8f4c441e032 154 return 0;
lixianyu 0:d8f4c441e032 155 }
lixianyu 0:d8f4c441e032 156 else
lixianyu 0:d8f4c441e032 157 {
lixianyu 0:d8f4c441e032 158 i2c_state = 2;
lixianyu 0:d8f4c441e032 159 if ( u8g_i2c_send_byte(I2C_DATA_MODE) == 0 )
lixianyu 0:d8f4c441e032 160 return 0;
lixianyu 0:d8f4c441e032 161 }
lixianyu 0:d8f4c441e032 162 */
lixianyu 0:d8f4c441e032 163 #endif
lixianyu 0:d8f4c441e032 164 break;
lixianyu 0:d8f4c441e032 165 }
lixianyu 0:d8f4c441e032 166 return 1;
lixianyu 0:d8f4c441e032 167 }
lixianyu 0:d8f4c441e032 168
lixianyu 0:d8f4c441e032 169 #else /* defined(U8G_WITH_PINLIST) */
lixianyu 0:d8f4c441e032 170
lixianyu 0:d8f4c441e032 171 uint8_t u8g_com_raspberrypi_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {
lixianyu 0:d8f4c441e032 172 return 1;
lixianyu 0:d8f4c441e032 173 }
lixianyu 0:d8f4c441e032 174
lixianyu 0:d8f4c441e032 175 #endif /* defined(U8G_WITH_PINLIST) */
lixianyu 0:d8f4c441e032 176 #endif
lixianyu 0:d8f4c441e032 177