Subversion Repositories Code-Repo

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
199 Kevin 1
#ifndef CUBE_H
2
#define	CUBE_H
3
 
212 Kevin 4
// Cube Parameters
199 Kevin 5
#define CUBE_ROW_COUNT 8
6
#define CUBE_COLUMN_COUNT 8
7
#define CUBE_LAYER_COUNT 8
237 Kevin 8
#define CUBE_PIXELS 512
205 Kevin 9
#define CUBE_ROTATIONS 7
199 Kevin 10
 
11
#define GCS_REG_SIZE 36
12
#define GCS_LAYER_SIZE (GCS_REG_SIZE*CUBE_ROW_COUNT)
13
 
212 Kevin 14
// Color Definitions
207 Kevin 15
#define RED    0x08F,0x000,0x000
16
#define ORANGE 0x08F,0x020,0x000
17
#define YELLOW 0x08F,0x08F,0x000
18
#define GREEN  0x000,0x08F,0x000
19
#define TEAL   0x000,0x08F,0x08F
20
#define BLUE   0x000,0x000,0x08F
21
#define PURPLE 0x08F,0x000,0x08F
241 Kevin 22
#define WHITE  0x0FF,0x0FF,0x0FF
199 Kevin 23
 
212 Kevin 24
// Control Pin Declarations
199 Kevin 25
#define SFT_D_TRIS TRISBbits.TRISB15
26
#define SFT_S_TRIS TRISDbits.TRISD5
27
#define SFT_K_TRIS TRISDbits.TRISD4
28
#define SFT_R_TRIS TRISBbits.TRISB14
29
 
30
#define SFT_D PORTBbits.RB15
31
#define SFT_S PORTDbits.RD5
32
#define SFT_K PORTDbits.RD4
33
#define SFT_R PORTBbits.RB14
34
 
35
#define GSLAT_TRIS TRISDbits.TRISD9
36
#define XBLNK_TRIS TRISDbits.TRISD2
37
 
38
#define GSLAT PORTDbits.RD9
39
#define XBLNK PORTDbits.RD2
40
 
212 Kevin 41
// String Overlay Buffer Size
42
#define CUBE_STRING_MAX_LENGTH 32
43
 
44
// Data Streaming In Buffer Size
216 Kevin 45
#define CUBE_FRAME_BUFFER_SIZE 3000
212 Kevin 46
#define CUBE_START_CHAR  0x7E
47
#define CUBE_ESCAPE_CHAR 0x7D
48
#define CUBE_ESCAPE_XOR  0x20
49
 
50
// Data Streaming In Command Set
215 Kevin 51
#define CUBE_COMMAND_SET_BC         0x0A // [Brightness Value]
52
#define CUBE_COMMAND_CLEAR          0x0B // (no data)
53
#define CUBE_COMMAND_SET_PIXEL      0x10 // [Layer, Row, Column, R, G, B]
216 Kevin 54
#define CUBE_COMMAND_SET_ALL        0x11 // [R1, G1, B1, R2, ...]
215 Kevin 55
#define CUBE_COMMAND_START_TEXT     0x20 // [R, G, B, Char1, Char2, Char3, ...]
56
#define CUBE_COMMAND_STOP_TEXT      0x21 // (no data)
212 Kevin 57
 
58
typedef enum {
59
    IDLE,
60
    READ_LENGTH_MSB,
61
    READ_LENGTH_LSB,
62
    READ_COMMAND,
63
    READ_DATA,
64
    READ_CHECKSUM
65
} PROCESS_STATE;
66
 
199 Kevin 67
typedef struct {
212 Kevin 68
    // Variables for base cube
231 Kevin 69
    uint8_t GCS[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
70
    uint8_t GCS_OVERLAY[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
71
    uint8_t GCS_WRITE[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
72
    uint8_t current_layer;
73
    uint8_t rotation_counter;
206 Kevin 74
 
212 Kevin 75
    // Variables for the scrolling text
231 Kevin 76
    uint8_t string[CUBE_STRING_MAX_LENGTH];
77
    uint8_t string_length;
78
    uint8_t string_index;
79
    uint8_t string_line;
80
    uint16_t string_R, string_G, string_B;
212 Kevin 81
 
82
    // Variables for input frame data
83
    PROCESS_STATE frame_state;
231 Kevin 84
    uint8_t frame_buffer[CUBE_FRAME_BUFFER_SIZE];
85
    uint8_t frame_checksum;
86
    uint32_t frame_length;
87
    uint32_t frame_index;
88
    uint32_t frame_command;
89
    uint32_t frame_escape;
199 Kevin 90
} CUBE_DATA;
91
 
231 Kevin 92
void Cube_Init(CUBE_DATA *data, uint8_t BC);
199 Kevin 93
void Cube_Timer_Interrupt(void);
94
 
95
// Callbacks on completion of DCS/GCS writes
96
void Cube_DCS_Write_Callback(void);
97
void Cube_GCS_Write_Callback(void);
98
 
99
// Cube control functions
231 Kevin 100
void Cube_Write_DCS(uint8_t BC);
199 Kevin 101
void Cube_Clear(void);
231 Kevin 102
void Cube_Set_All(uint16_t R, uint16_t G, uint16_t B);
103
void Cube_Set_Layer(uint8_t layer, uint16_t R, uint16_t G, uint16_t B);
104
void Cube_Set_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t R, uint16_t G, uint16_t B);
105
void Cube_Get_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t* R, uint16_t* G, uint16_t* B);
106
void Cube_Move_Pixel(uint8_t layer1, uint8_t row1, uint8_t column1, uint8_t layer2, uint8_t row2, uint8_t column2);
107
void Cube_Rotate_Shell(uint8_t shell, uint8_t direction);
108
void Cube_Rotate(uint8_t direction);
205 Kevin 109
 
212 Kevin 110
// Overlay control functions
206 Kevin 111
void Cube_Overlay_Clear(void);
231 Kevin 112
void Cube_Overlay_Set_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t R, uint16_t G, uint16_t B);
113
void Cube_Overlay_Get_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t* R, uint16_t* G, uint16_t* B);
114
void Cube_Overlay_Move_Pixel(uint8_t layer1, uint8_t row1, uint8_t column1, uint8_t layer2, uint8_t row2, uint8_t column2);
115
void Cube_Overlay_Rotate_Shell(uint8_t shell, uint8_t direction);
205 Kevin 116
 
212 Kevin 117
// Text control functions
231 Kevin 118
void Cube_Text_Init(uint8_t *string, uint8_t length, uint16_t R, uint16_t G, uint16_t B);
206 Kevin 119
void Cube_Text_Interrupt(void);
120
 
212 Kevin 121
// Data stream in control functions
263 Kevin 122
// UART functions
231 Kevin 123
void Cube_Data_In(uint8_t c);
212 Kevin 124
void Cube_Data_In_Process_Frame(void);
231 Kevin 125
void Cube_Data_Direct_Write_All(uint8_t *buffer);
263 Kevin 126
// Ethernet functions
255 Kevin 127
void Cube_Ethernet_Frame_In(void);
212 Kevin 128
 
199 Kevin 129
#endif	/* CUBE_H */
130