You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							936 B
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							936 B
						
					
					
				| /* i2c.c */ | |
|  | |
| #include "common.h" | |
| #include "SDL.h" | |
| #include "SDL_gfxPrimitives.h" | |
|  | |
|  | |
| #define WHITE 0xffffffff | |
| #define BLACK 0x000000ff | |
|  | |
| uint8_t i2c_xor; | |
| uint8_t page; | |
| uint8_t col; | |
|  | |
|  | |
| extern SDL_Surface *screen; | |
|  | |
| void i2c_init(void) | |
| { | |
| } | |
|  | |
| void i2c_set_xor(char xor) | |
| { | |
|     i2c_xor = xor; | |
| } | |
|  | |
| bool i2c_write(char address, char prefix, char bytes, char *data) | |
| { | |
|     uint8_t i, j; | |
|  | |
|     switch ((uint8_t) prefix) { | |
|     case 0x80: | |
| 	switch (data[0] & 0xf0) { | |
| 	case 0xb0: | |
| 	    page = data[0] & 0xf; | |
| 	    break; | |
| 	case 0x00: | |
| 	    col = (col & ~0xf) + (data[0] & 0xf); | |
| 	    break; | |
| 	case 0x10: | |
| 	    col = (col & 0xf) + ((data[0] & 0xf) << 4); | |
| 	    break; | |
| 	} | |
| 	break; | |
|     case 0x40: | |
| 	for (i = 0; i < bytes; i++) { | |
| 	    uint8_t byte = data[i] ^ i2c_xor; | |
| 	    for (j = 0; j < 8; j++) { | |
| 		pixelColor(screen, col, page*8 + j, (byte & 1)?WHITE:BLACK); | |
| 		byte = byte >> 1; | |
| 	    } | |
| 	    col++; | |
| 	    if (col > 127) | |
| 		col = 0; | |
| 	} | |
| 	break; | |
|     } | |
|  | |
|  | |
|     return TRUE; | |
| } | |
| 
 | |
| 
 |