Subversion Repositories HomeAutomation

Rev

Rev 951 | Rev 998 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. #include "act_hd44780.h"
  3.  
  4. uint8_t Command = 0;
  5.  
  6. void act_hd44780_Init(void)
  7. {
  8.     ///FIXME: What is this, this needs to be more clear by far....
  9.  
  10.     // Contrast
  11.     TCCR0A |= (1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  12.     TCCR0B |= (1<<CS00);
  13.     OCR0B = 0x10;
  14.     DDRD |= (1<<DDD5);
  15.  
  16.  
  17.     // Backlight
  18.     TCCR1A |= (1<<COM1A1)|(1<<WGM11);
  19.     TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS10);
  20.     ICR1 = 0xFF; // Make it 8 bits
  21.     OCR1A = act_hd44780_INITIAL_BACKLIGHT;
  22.     DDRB |= (1<<DDB1);
  23.  
  24.  
  25.     lcd_init(LCD_DISP_ON);
  26.     lcd_clrscr();
  27.     lcd_puts("HomeAutomation\n");
  28.     lcd_puts("HD44780-module\n");
  29. }
  30.  
  31. void act_hd44780_Process(void)
  32. {
  33. }
  34.  
  35. void act_hd44780_HandleMessage(StdCan_Msg_t *rxMsg)
  36. {
  37.     StdCan_Msg_t txMsg;
  38.     uint8_t n = 0;
  39.  
  40.     if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
  41.         StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
  42.         rxMsg->Header.ModuleType == CAN_MODULE_TYPE_ACT_HD44789 &&
  43.         rxMsg->Header.ModuleId == act_hd44780_ID)
  44.     {
  45.         switch (rxMsg->Header.Command)
  46.         {
  47.         case CAN_MODULE_CMD_HD44789_LCD_CLEAR:
  48.         lcd_clrscr();
  49.         break;
  50.  
  51.         case CAN_MODULE_CMD_HD44789_LCD_CURSOR:
  52.         lcd_gotoxy(rxMsg->Data[0], rxMsg->Data[1]);
  53.         break;
  54.  
  55.         case CAN_MODULE_CMD_HD44789_LCD_TEXTAT:
  56.         lcd_gotoxy(rxMsg->Data[0], rxMsg->Data[1]);
  57.         for (n = 2; n < rxMsg->Length; n++)
  58.         {
  59.             lcd_putc((char)rxMsg->Data[n]);
  60.         }
  61.         break;
  62.        
  63.         case CAN_MODULE_CMD_HD44789_LCD_TEXT:
  64.         for (n = 0; n < rxMsg->Length; n++)
  65.         {
  66.             lcd_putc((char)rxMsg->Data[n]);
  67.         }
  68.         break;
  69.  
  70.         case CAN_MODULE_CMD_HD44789_LCD_SIZE:
  71.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  72.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  73.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  74.         txMsg.Header.ModuleId = act_hd44780_ID;
  75.         txMsg.Header.Command = CAN_MODULE_CMD_HD44789_LCD_SIZE;
  76.         txMsg.Length = 2;
  77.  
  78.         txMsg.Data[0] = act_hd44780_WIDTH;
  79.         txMsg.Data[1] = act_hd44780_HEIGHT;
  80.  
  81.         StdCan_Put(&txMsg);
  82.         break;
  83.  
  84.         case CAN_MODULE_CMD_HD44789_LCD_BACKLIGHT:
  85.         if (rxMsg->Length > 0)
  86.             OCR1AL = rxMsg->Data[0];
  87.  
  88.         StdCan_Msg_t txMsg;
  89.  
  90.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  91.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  92.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  93.         txMsg.Header.ModuleId = act_hd44780_ID;
  94.         txMsg.Header.Command = CAN_MODULE_CMD_HD44789_LCD_BACKLIGHT;
  95.         txMsg.Length = 1;
  96.  
  97.         txMsg.Data[0] = OCR1AL;
  98.  
  99.         StdCan_Put(&txMsg);
  100.         break;
  101.         }
  102.     }
  103. }
  104.  
  105. void act_hd44780_List(uint8_t ModuleSequenceNumber)
  106. {
  107.     StdCan_Msg_t txMsg;
  108.  
  109.     StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  110.     StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  111.     txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  112.     txMsg.Header.ModuleId = act_hd44780_ID;
  113.     txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST;
  114.     txMsg.Length = 6;
  115.  
  116.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  117.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  118.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  119.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  120.  
  121.     txMsg.Data[4] = NUMBER_OF_MODULES;
  122.     txMsg.Data[5] = ModuleSequenceNumber;
  123.  
  124.     while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  125. }
  126.