Rev 207 | Blame | Last modification | View Log | Download | RSS feed
#ifndef CUBE_H#define CUBE_H// Cube Parameters#define CUBE_ROW_COUNT 8#define CUBE_COLUMN_COUNT 8#define CUBE_LAYER_COUNT 8#define CUBE_ROTATIONS 7#define GCS_REG_SIZE 36#define GCS_LAYER_SIZE (GCS_REG_SIZE*CUBE_ROW_COUNT)// Color Definitions#define RED 0x08F,0x000,0x000#define ORANGE 0x08F,0x020,0x000#define YELLOW 0x08F,0x08F,0x000#define GREEN 0x000,0x08F,0x000#define TEAL 0x000,0x08F,0x08F#define BLUE 0x000,0x000,0x08F#define PURPLE 0x08F,0x000,0x08F// Control Pin Declarations#define SFT_D_TRIS TRISBbits.TRISB15#define SFT_S_TRIS TRISDbits.TRISD5#define SFT_K_TRIS TRISDbits.TRISD4#define SFT_R_TRIS TRISBbits.TRISB14#define SFT_D PORTBbits.RB15#define SFT_S PORTDbits.RD5#define SFT_K PORTDbits.RD4#define SFT_R PORTBbits.RB14#define GSLAT_TRIS TRISDbits.TRISD9#define XBLNK_TRIS TRISDbits.TRISD2#define GSLAT PORTDbits.RD9#define XBLNK PORTDbits.RD2// String Overlay Buffer Size#define CUBE_STRING_MAX_LENGTH 32// Data Streaming In Buffer Size#define CUBE_FRAME_BUFFER_SIZE 128#define CUBE_START_CHAR 0x7E#define CUBE_ESCAPE_CHAR 0x7D#define CUBE_ESCAPE_XOR 0x20// Data Streaming In Command Set#define CUBE_COMMAND_SET_PIXEL 0x10 // Layer, Row, Column, R, G, B <-- frame layouttypedef enum {IDLE,READ_LENGTH_MSB,READ_LENGTH_LSB,READ_COMMAND,READ_DATA,READ_CHECKSUM} PROCESS_STATE;typedef struct {// Variables for base cubeunsigned char GCS[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];unsigned char GCS_OVERLAY[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];unsigned char GCS_WRITE[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];unsigned char current_layer;unsigned char rotation_counter;// Variables for the scrolling textunsigned char string[CUBE_STRING_MAX_LENGTH];unsigned char string_length;unsigned char string_index;unsigned char string_line;int string_R, string_G, string_B;// Variables for input frame dataPROCESS_STATE frame_state;unsigned char frame_buffer[CUBE_FRAME_BUFFER_SIZE];int frame_checksum;int frame_length;int frame_index;int frame_command;int frame_escape;} CUBE_DATA;void Cube_Init(CUBE_DATA *data, char BC);void Cube_Timer_Interrupt(void);// Callbacks on completion of DCS/GCS writesvoid Cube_DCS_Write_Callback(void);void Cube_GCS_Write_Callback(void);// Cube control functionsvoid Cube_Write_DCS(char BC);void Cube_Clear(void);void Cube_Set_All(int R, int G, int B);void Cube_Set_Layer(int layer, int R, int G, int B);void Cube_Set_Pixel(int layer, int row, int column, int R, int G, int B);void Cube_Get_Pixel(int layer, int row, int column, int* R, int* G, int* B);void Cube_Move_Pixel(int layer1, int row1, int column1, int layer2, int row2, int column2);void Cube_Rotate_Shell(char shell, char direction);void Cube_Rotate(char direction);// Overlay control functionsvoid Cube_Overlay_Clear(void);void Cube_Overlay_Set_Pixel(int layer, int row, int column, int R, int G, int B);void Cube_Overlay_Get_Pixel(int layer, int row, int column, int* R, int* G, int* B);void Cube_Overlay_Move_Pixel(int layer1, int row1, int column1, int layer2, int row2, int column2);void Cube_Overlay_Rotate_Shell(char shell, char direction);// Text control functionsvoid Cube_Text_Init(char *string, char length, int R, int G, int B);void Cube_Text_Interrupt(void);// Data stream in control functionsvoid Cube_Data_In(char c);void Cube_Data_In_Process_Frame(void);#endif /* CUBE_H */