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
264 Kevin 15
#define CLEAR  0x000,0x000,0x000
16
#define RED    0x0FF,0x000,0x000
276 Kevin 17
#define ORANGE 0x0FF,0x020,0x000
18
#define YELLOW 0x0FF,0x060,0x000
264 Kevin 19
#define GREEN  0x000,0x0FF,0x000
20
#define TEAL   0x000,0x0FF,0x040
21
#define BLUE   0x000,0x000,0x0FF
22
#define PURPLE 0x0FF,0x000,0x0FF
241 Kevin 23
#define WHITE  0x0FF,0x0FF,0x0FF
199 Kevin 24
 
212 Kevin 25
// Control Pin Declarations
269 Kevin 26
#define DCSIN_TRIS TRISDbits.TRISD3
27
#define DCSCK_TRIS TRISDbits.TRISD12
199 Kevin 28
 
269 Kevin 29
#define DCSIN LATDbits.LATD3
30
#define DCSCK LATDbits.LATD12
199 Kevin 31
 
269 Kevin 32
#define SFT_R_TRIS TRISBbits.TRISB15
33
#define SFT_K_TRIS TRISDbits.TRISD5
34
#define SFT_S_TRIS TRISDbits.TRISD4
35
#define SFT_D_TRIS TRISBbits.TRISB14
36
 
37
#define SFT_R LATBbits.LATB15
38
#define SFT_K LATDbits.LATD5
39
#define SFT_S LATDbits.LATD4
40
#define SFT_D LATBbits.LATB14
41
 
199 Kevin 42
#define GSLAT_TRIS TRISDbits.TRISD9
43
#define XBLNK_TRIS TRISDbits.TRISD2
44
 
268 Kevin 45
#define GSLAT LATDbits.LATD9
46
#define XBLNK LATDbits.LATD2
199 Kevin 47
 
212 Kevin 48
// String Overlay Buffer Size
264 Kevin 49
#define CUBE_STRING_MAX_LENGTH 255
212 Kevin 50
 
51
// Data Streaming In Buffer Size
216 Kevin 52
#define CUBE_FRAME_BUFFER_SIZE 3000
212 Kevin 53
#define CUBE_START_CHAR  0x7E
54
#define CUBE_ESCAPE_CHAR 0x7D
55
#define CUBE_ESCAPE_XOR  0x20
56
 
57
// Data Streaming In Command Set
215 Kevin 58
#define CUBE_COMMAND_SET_BC         0x0A // [Brightness Value]
59
#define CUBE_COMMAND_CLEAR          0x0B // (no data)
60
#define CUBE_COMMAND_SET_PIXEL      0x10 // [Layer, Row, Column, R, G, B]
216 Kevin 61
#define CUBE_COMMAND_SET_ALL        0x11 // [R1, G1, B1, R2, ...]
215 Kevin 62
#define CUBE_COMMAND_START_TEXT     0x20 // [R, G, B, Char1, Char2, Char3, ...]
63
#define CUBE_COMMAND_STOP_TEXT      0x21 // (no data)
212 Kevin 64
 
264 Kevin 65
// Ethernet Op-Codes
66
#define CUBE_ETH_RESET              0x01
67
#define CUBE_EHT_IDLE               0x02
68
#define CUBE_ETH_CLEAR              0x0A
69
#define CUBE_ETH_DCS                0x0B
70
#define CUBE_ETH_ROTATE             0x0C
71
#define CUBE_ETH_ROTATE_LAYER       0x0D
72
#define CUBE_ETH_WRITE_ALL          0x10
73
#define CUBE_ETH_WRITE_PIXEL        0x11
74
#define CUBE_ETH_WRITE_CHANNEL      0x12
266 Kevin 75
#define CUBE_ETH_WRITE_TEXT_SCROLL  0x20
76
#define CUBE_ETH_WRITE_TEXT_STATIC  0x21
77
#define CUBE_EHT_WRITE_TEXT_INSERT  0x22
264 Kevin 78
#define CUBE_ETH_WATERFALL          0x30
79
#define CUBE_ETH_SPHERE             0x31
80
 
212 Kevin 81
typedef enum {
82
    IDLE,
83
    READ_LENGTH_MSB,
84
    READ_LENGTH_LSB,
85
    READ_COMMAND,
86
    READ_DATA,
87
    READ_CHECKSUM
88
} PROCESS_STATE;
89
 
199 Kevin 90
typedef struct {
212 Kevin 91
    // Variables for base cube
231 Kevin 92
    uint8_t GCS[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
93
    uint8_t GCS_OVERLAY[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
94
    uint8_t GCS_WRITE[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
95
    uint8_t current_layer;
96
    uint8_t rotation_counter;
206 Kevin 97
 
212 Kevin 98
    // Variables for the scrolling text
231 Kevin 99
    uint8_t string[CUBE_STRING_MAX_LENGTH];
100
    uint8_t string_length;
101
    uint8_t string_index;
102
    uint8_t string_line;
103
    uint16_t string_R, string_G, string_B;
212 Kevin 104
 
105
    // Variables for input frame data
106
    PROCESS_STATE frame_state;
231 Kevin 107
    uint8_t frame_buffer[CUBE_FRAME_BUFFER_SIZE];
108
    uint8_t frame_checksum;
109
    uint32_t frame_length;
110
    uint32_t frame_index;
111
    uint32_t frame_command;
112
    uint32_t frame_escape;
199 Kevin 113
} CUBE_DATA;
114
 
231 Kevin 115
void Cube_Init(CUBE_DATA *data, uint8_t BC);
199 Kevin 116
void Cube_Timer_Interrupt(void);
117
 
118
// Callbacks on completion of DCS/GCS writes
119
void Cube_DCS_Write_Callback(void);
120
void Cube_GCS_Write_Callback(void);
121
 
122
// Cube control functions
231 Kevin 123
void Cube_Write_DCS(uint8_t BC);
199 Kevin 124
void Cube_Clear(void);
231 Kevin 125
void Cube_Set_All(uint16_t R, uint16_t G, uint16_t B);
126
void Cube_Set_Layer(uint8_t layer, uint16_t R, uint16_t G, uint16_t B);
264 Kevin 127
void Cube_Set_Row(uint8_t row, uint16_t R, uint16_t G, uint16_t B);
128
void Cube_Set_Column(uint8_t column, uint16_t R, uint16_t G, uint16_t B);
231 Kevin 129
void Cube_Set_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t R, uint16_t G, uint16_t B);
130
void Cube_Get_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t* R, uint16_t* G, uint16_t* B);
131
void Cube_Move_Pixel(uint8_t layer1, uint8_t row1, uint8_t column1, uint8_t layer2, uint8_t row2, uint8_t column2);
264 Kevin 132
void Cube_Set_Sphere(uint8_t layer, uint8_t R, uint8_t G, uint8_t B);
133
void Cube_Set_Shell(uint8_t layer, uint8_t R, uint8_t G, uint8_t B);
231 Kevin 134
void Cube_Rotate_Shell(uint8_t shell, uint8_t direction);
135
void Cube_Rotate(uint8_t direction);
264 Kevin 136
void Cube_Shift_Row(uint8_t direction);
205 Kevin 137
 
264 Kevin 138
void Cube_Shift_Waterfall(uint8_t *values);
139
void Cube_Shift_Waterfall2(uint8_t *values);
140
 
212 Kevin 141
// Overlay control functions
206 Kevin 142
void Cube_Overlay_Clear(void);
231 Kevin 143
void Cube_Overlay_Set_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t R, uint16_t G, uint16_t B);
144
void Cube_Overlay_Get_Pixel(uint8_t layer, uint8_t row, uint8_t column, uint16_t* R, uint16_t* G, uint16_t* B);
145
void Cube_Overlay_Move_Pixel(uint8_t layer1, uint8_t row1, uint8_t column1, uint8_t layer2, uint8_t row2, uint8_t column2);
146
void Cube_Overlay_Rotate_Shell(uint8_t shell, uint8_t direction);
205 Kevin 147
 
212 Kevin 148
// Text control functions
231 Kevin 149
void Cube_Text_Init(uint8_t *string, uint8_t length, uint16_t R, uint16_t G, uint16_t B);
266 Kevin 150
void Cube_Text_Update(void);
268 Kevin 151
void Cube_Text_Insert(uint8_t c, uint16_t R, uint16_t G, uint16_t B, uint16_t delay);
152
void Cube_Text_Single_Char_Interupt(void);
206 Kevin 153
void Cube_Text_Interrupt(void);
154
 
212 Kevin 155
// Data stream in control functions
263 Kevin 156
// UART functions
231 Kevin 157
void Cube_Data_In(uint8_t c);
212 Kevin 158
void Cube_Data_In_Process_Frame(void);
231 Kevin 159
void Cube_Data_Direct_Write_All(uint8_t *buffer);
263 Kevin 160
// Ethernet functions
255 Kevin 161
void Cube_Ethernet_Frame_In(void);
212 Kevin 162
 
199 Kevin 163
#endif	/* CUBE_H */
164