#ifndef _ELMU_H
#define _ELMU_H

/* ========================================== **
**                                            **
** Elmu.h                                     **
**                                            **
** Auteur : Stephane Caron                    **
** Date :   Avril 2006                        **
** Projet : PPE - ELMU                        **
**                                            **
**   En-tete des fichiers  source  du projet, **
** il comporte  toutes les  constantes utiles **
** ainsi que les prototypes de l'API interne. **
**                                            **
** ========================================== */

//Definir pour microcontrôleur
char PORTC@0x07;
char TRISC@0x87;
char PORTD@0x08;
char TRISD@0x88;
char PORTE@0x09;
char TRISE@0x89;

//Fonctions PIC
#pragma CLOCK_FREQ 3276800
#define P16F877
#include <system.h>
#define MX_EE
#define MX_EE_TYPE2
const char MX_EE_SIZE = 256;
#define MX_SPI
#define MX_SPI_C
#define MX_SPI_SDI 4
#define MX_SPI_SDO 5
#define MX_SPI_SCK 3
#define MX_UART
#define MX_UART_C
#define MX_UART_TX 6
#define MX_UART_RX 7

/*=============================================
// Fréquence d'horloge

#pragma CLOCK_FREQ 3276800

//=============================================
// PART = PIC 16F877

#define         W               0x0000                                                                                         
#define         F               0x0001                                                                                         

//=============================================
// Registres et ports

char indf@0x0000;
char tmr0@0x0001;
char pcl@0x0002;
char status@0x0003;
char fsr@0x0004;
char porta@0x0005;
char portb@0x0006;
char portc@0x0007;
char portd@0x0008;
char porte@0x0009;
char pclath@0x000A;
char intcon@0x000B;
char pir1@0x000C;
char pir2@0x000D;
char tmr1l@0x000E;
char tmr1h@0x000F;
char t1con@0x0010;
char tmr2@0x0011;
char t2con@0x0012;
char sspbuf@0x0013;
char sspcon@0x0014;
char ccpr1l@0x0015;
char ccpr1h@0x0016;
char ccp1con@0x0017;
char rcsta@0x0018;
char txreg@0x0019;
char rcreg@0x001A;
char ccpr2l@0x001B;
char ccpr2h@0x001C;
char ccp2con@0x001D;
char adresh@0x001E;
char adcon0@0x001F;
char option_reg@0x0081;
char trisa@0x0085;
char trisb@0x0086;
char trisc@0x0087;
char trisd@0x0088;
char trise@0x0089;
char pie1@0x008C;
char pie2@0x008D;
char pcon@0x008E;
char sspcon2@0x0091;
char pr2@0x0092;
char sspadd@0x0093;
char sspstat@0x0094;
char txsta@0x0098;
char spbrg@0x0099;
char adresl@0x009E;
char adcon1@0x009F;
// char eedata@0x010C;
// char eeadr@0x010D;
// char eedath@0x010E;
// char eeadrh@0x010F;
// char eecon1@0x018C;
// char eecon2@0x018D;

//=============================================
// Bits d'état (STATUS)

#define         IRP             0x0007                                                                                         
#define         RP1             0x0006                                                                                         
#define         RP0             0x0005                                                                                         
#define         NOT_TO          0x0004                                                                                         
#define         NOT_PD          0x0003                                                                                         
#define         Z               0x0002                                                                                         
#define         DC              0x0001                                                                                         
#define         C               0x0000                                                                                         

//=============================================
// Bits INTCON

#define         GIE             0x0007                                                                                         
#define         PEIE            0x0006                                                                                         
#define         T0IE            0x0005                                                                                         
#define         INTE            0x0004                                                                                         
#define         RBIE            0x0003                                                                                         
#define         T0IF            0x0002                                                                                         
#define         INTF            0x0001                                                                                         
#define         RBIF            0x0000                                                                                         

//=============================================
// Bits PIR1

#define         PSPIF           0x0007                                                                                         
#define         ADIF            0x0006                                                                                         
#define         RCIF            0x0005                                                                                         
#define         TXIF            0x0004                                                                                         
#define         SSPIF           0x0003                                                                                         
#define         CCP1IF          0x0002                                                                                         
#define         TMR2IF          0x0001                                                                                         
#define         TMR1IF          0x0000                                                                                         

//=============================================
// Bits PIR2

#define         EEIF            0x0004                                                                                         
#define         BCLIF           0x0003                                                                                         
#define         CCP2IF          0x0000                                                                                         

//=============================================
// Bits T1CON

#define         T1CKPS1         0x0005                                                                                         
#define         T1CKPS0         0x0004                                                                                         
#define         T1OSCEN         0x0003                                                                                         
#define         NOT_T1SYNC      0x0002                                                                                         
#define         T1INSYNC        0x0002                                                                                         
#define         T1SYNC          0x0002                                                                                         
#define         TMR1CS          0x0001                                                                                         
#define         TMR1ON          0x0000                                                                                         

//=============================================
// Bits T2CON

#define         TOUTPS3         0x0006                                                                                         
#define         TOUTPS2         0x0005                                                                                         
#define         TOUTPS1         0x0004                                                                                         
#define         TOUTPS0         0x0003                                                                                         
#define         TMR2ON          0x0002                                                                                         
#define         T2CKPS1         0x0001                                                                                         
#define         T2CKPS0         0x0000                                                                                         

//=============================================
// Bits SSPCON

#define         WCOL            0x0007                                                                                         
#define         SSPOV           0x0006                                                                                         
#define         SSPEN           0x0005                                                                                         
#define         CKP             0x0004                                                                                         
#define         SSPM3           0x0003                                                                                         
#define         SSPM2           0x0002                                                                                         
#define         SSPM1           0x0001                                                                                         
#define         SSPM0           0x0000                                                                                         

//=============================================
// Bits CCP1CON

#define         CCP1X           0x0005                                                                                         
#define         CCP1Y           0x0004                                                                                         
#define         CCP1M3          0x0003                                                                                         
#define         CCP1M2          0x0002                                                                                         
#define         CCP1M1          0x0001                                                                                         
#define         CCP1M0          0x0000                                                                                         

//=============================================
// Bits RCSTA

#define         SPEN            0x0007                                                                                         
#define         RX9             0x0006                                                                                         
#define         RC9             0x0006                                                                                         
#define         NOT_RC8         0x0006                                                                                         
#define         RC8_9           0x0006                                                                                         
#define         SREN            0x0005                                                                                         
#define         CREN            0x0004                                                                                         
#define         ADDEN           0x0003                                                                                         
#define         FERR            0x0002                                                                                         
#define         OERR            0x0001                                                                                         
#define         RX9D            0x0000                                                                                         
#define         RCD8            0x0000                                                                                         

//=============================================
// Bits CCP2CON

#define         CCP2X           0x0005                                                                                         
#define         CCP2Y           0x0004                                                                                         
#define         CCP2M3          0x0003                                                                                         
#define         CCP2M2          0x0002                                                                                         
#define         CCP2M1          0x0001                                                                                         
#define         CCP2M0          0x0000                                                                                         

//=============================================
// Bits ADCON0

#define         ADCS1           0x0007                                                                                         
#define         ADCS0           0x0006                                                                                         
#define         CHS2            0x0005                                                                                         
#define         CHS1            0x0004                                                                                         
#define         CHS0            0x0003                                                                                         
#define         GO              0x0002                                                                                         
#define         NOT_DONE        0x0002                                                                                         
#define         GO_DONE         0x0002                                                                                         
#define         ADON            0x0000                                                                                         

//=============================================
// Bits de registre d'option (OPTION_REG)

#define         NOT_RBPU        0x0007                                                                                         
#define         INTEDG          0x0006                                                                                         
#define         T0CS            0x0005                                                                                         
#define         T0SE            0x0004                                                                                         
#define         PSA             0x0003                                                                                         
#define         PS2             0x0002                                                                                         
#define         PS1             0x0001                                                                                         
#define         PS0             0x0000                                                                                         

//=============================================
// Bits TRISE

#define         IBF             0x0007                                                                                         
#define         OBF             0x0006                                                                                         
#define         IBOV            0x0005                                                                                         
#define         PSPMODE         0x0004                                                                                         
#define         TRISE2          0x0002                                                                                         
#define         TRISE1          0x0001                                                                                         
#define         TRISE0          0x0000                                                                                         

//=============================================
// Bits PIE1

#define         PSPIE           0x0007                                                                                         
#define         ADIE            0x0006                                                                                         
#define         RCIE            0x0005                                                                                         
#define         TXIE            0x0004                                                                                         
#define         SSPIE           0x0003                                                                                         
#define         CCP1IE          0x0002                                                                                         
#define         TMR2IE          0x0001                                                                                         
#define         TMR1IE          0x0000                                                                                         

//=============================================
// Bits PIE2

#define         EEIE            0x0004                                                                                         
#define         BCLIE           0x0003                                                                                         
#define         CCP2IE          0x0000                                                                                         

//=============================================
// Bits PCON

#define         NOT_POR         0x0001                                                                                         
#define         NOT_BO          0x0000                                                                                         
#define         NOT_BOR         0x0000                                                                                         

//=============================================
// Bits SSPCON2

#define         GCEN            0x0007                                                                                         
#define         ACKSTAT         0x0006                                                                                         
#define         ACKDT           0x0005                                                                                         
#define         ACKEN           0x0004                                                                                         
#define         RCEN            0x0003                                                                                         
#define         PEN             0x0002                                                                                         
#define         RSEN            0x0001                                                                                         
#define         SEN             0x0000                                                                                         

//=============================================
// Bits SSPSTAT

#define         SMP             0x0007                                                                                         
#define         CKE             0x0006                                                                                         
#define         D               0x0005                                                                                         
#define         I2C_DATA        0x0005                                                                                         
#define         NOT_A           0x0005                                                                                         
#define         NOT_ADDRESS     0x0005                                                                                         
#define         D_A             0x0005                                                                                         
#define         DATA_ADDRESS    0x0005                                                                                         
#define         P               0x0004                                                                                         
#define         I2C_STOP        0x0004                                                                                         
#define         S               0x0003                                                                                         
#define         I2C_START       0x0003                                                                                         
#define         R               0x0002                                                                                         
#define         I2C_READ        0x0002                                                                                         
#define         NOT_W           0x0002                                                                                         
#define         NOT_WRITE       0x0002                                                                                         
#define         R_W             0x0002                                                                                         
#define         READ_WRITE      0x0002                                                                                         
#define         UA              0x0001                                                                                         
#define         BF              0x0000                                                                                         

//=============================================
// Bits TXSTA

#define         CSRC            0x0007                                                                                         
#define         TX9             0x0006                                                                                         
#define         NOT_TX8         0x0006                                                                                         
#define         TX8_9           0x0006                                                                                         
#define         TXEN            0x0005                                                                                         
#define         SYNC            0x0004                                                                                         
#define         BRGH            0x0002                                                                                         
#define         TRMT            0x0001                                                                                         
#define         TX9D            0x0000                                                                                         
#define         TXD8            0x0000                                                                                         

//=============================================
// Bits ADCON1

#define         ADFM            0x0007                                                                                         
#define         PCFG3           0x0003                                                                                         
#define         PCFG2           0x0002                                                                                         
#define         PCFG1           0x0001                                                                                         
#define         PCFG0           0x0000                                                                                         

//=============================================
// EECON1 Bits

#define         EEPGD           0x0007                                                                                         
#define         WRERR           0x0003                                                                                         
#define         WREN            0x0002                                                                                         
#define         WR              0x0001                                                                                         
#define         RD              0x0000                                                                                         

//=============================================
// Bits de configuration

#define         _CP_ALL         0x0FCF                                                                                         
#define         _CP_HALF        0x1FDF                                                                                         
#define         _CP_UPPER_256   0x2FEF                                                                                         
#define         _CP_OFF         0x3FFF                                                                                         
#define         _DEBUG_ON       0x37FF                                                                                         
#define         _DEBUG_OFF      0x3FFF                                                                                         
#define         _WRT_ENABLE_ON  0x3FFF                                                                                         
#define         _WRT_ENABLE_OFF 0x3DFF                                                                                         
#define         _CPD_ON         0x3EFF                                                                                         
#define         _CPD_OFF        0x3FFF                                                                                         
#define         _LVP_ON         0x3FFF                                                                                         
#define         _LVP_OFF        0x3F7F                                                                                         
#define         _BODEN_ON       0x3FFF                                                                                         
#define         _BODEN_OFF      0x3FBF                                                                                         
#define         _PWRTE_OFF      0x3FFF                                                                                         
#define         _PWRTE_ON       0x3FF7                                                                                         
#define         _WDT_ON         0x3FFF                                                                                         
#define         _WDT_OFF        0x3FFB                                                                                         
#define         _LP_OSC         0x3FFC                                                                                         
#define         _XT_OSC         0x3FFD                                                                                         
#define         _HS_OSC         0x3FFE                                                                                         
#define         _RC_OSC         0x3FFF                                                                                         

//=============================================
// Constantes MX

#define MX_EE
#define MX_EE_TYPE2
const char MX_EE_SIZE = 256;
#define MX_SPI
#define MX_SPI_C
#define MX_SPI_SDI 4
#define MX_SPI_SDO 5
#define MX_SPI_SCK 3
#define MX_UART
#define MX_UART_C
#define MX_UART_TX 6
#define MX_UART_RX 7

*/
//=============================================
// Constantes de touches (PORTA)

#define BUTTON_OK       1
#define BUTTON_CANCEL   2
#define BUTTON_EMPTY    3
#define BUTTON_CLEAN    4
#define BUTTON_UNIT     5
#define BUTTON_INCR     6
#define BUTTON_DECR     7

//=============================================
// Constantes d'affichage (PORTB)

#define NB_UNITS        4
#define SCREEN_MAIN     1
#define SCREEN_VOLUME   2
#define SCREEN_TIMER    3
#define SCREEN_EMPTY    4
#define SCREEN_CLEAN_1  5
#define SCREEN_CLEAN_2  6
#define SCREEN_CLEAN_3  7

const char UNITS[NB_UNITS] = {' ', 'd', 'c', 'm'};

//=============================================
// Prototypes des mŽthodes LCD (PORTB)

void ElmuLCDClear();
void ElmuLCDCommand(char);
void ElmuLCDCursor(char, char);
void ElmuLCDPrintASCII(char);
void ElmuLCDPrintNum(char);
void ElmuLCDPrintString(const char*);
void ElmuLCDRawSend(char, char);
void ElmuLCDStart();

//=============================================
// Prototypes globaux

void ElmuShiftScreen(char);

//=============================================
// Constantes physiques

#define PHYS_DIAM      10
#define PHYS_DIFF      10

#endif // _ELMU_H
