Subversion Repositories HomeAutomation

Rev

Rev 869 | Rev 948 | 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_CLASS_MODULE_ACT &&
  41.         StdCan_Ret_direction(rxMsg->Header) == DIR_TO_OWNER &&
  42.         rxMsg->Header.ModuleType == CAN_TYPE_MODULE_act_hd44789 &&
  43.         rxMsg->Header.ModuleId == act_hd44780_ID)
  44.     {
  45.         switch (rxMsg->Header.Command)
  46.         {
  47.         case CAN_CMD_MODULE_LCD_CLEAR:
  48.         lcd_clrscr();
  49.         break;
  50.  
  51.         case CAN_CMD_MODULE_LCD_CURSOR:
  52.         lcd_gotoxy(rxMsg->Data[0], rxMsg->Data[1]);
  53.         break;
  54.  
  55.         case CAN_CMD_MODULE_LCD_PRINT:
  56.         for(n = 0; n < rxMsg->Length; n++)
  57.         {
  58.             lcd_putc((char)rxMsg->Data[n]);
  59.         }
  60.         break;
  61.  
  62.         case CAN_CMD_MODULE_LCD_SIZE:
  63.         StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_ACT);
  64.         StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  65.         txMsg.Header.ModuleType = CAN_TYPE_MODULE_act_hd44789;
  66.         txMsg.Header.ModuleId = act_hd44780_ID;
  67.         txMsg.Header.Command = CAN_CMD_MODULE_LCD_SIZE;
  68.         txMsg.Length = 2;
  69.  
  70.         txMsg.Data[0] = act_hd44780_WIDTH;
  71.         txMsg.Data[1] = act_hd44780_HEIGHT;
  72.  
  73.         StdCan_Put(&txMsg);
  74.         break;
  75.  
  76.         case CAN_CMD_MODULE_LCD_BACKLIGHT:
  77.         if (rxMsg->Length > 0)
  78.             OCR1AL = rxMsg->Data[0];
  79.  
  80.         StdCan_Msg_t txMsg;
  81.  
  82.         StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_ACT);
  83.         StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  84.         txMsg.Header.ModuleType = CAN_TYPE_MODULE_act_hd44789;
  85.         txMsg.Header.ModuleId = act_hd44780_ID;
  86.         txMsg.Header.Command = CAN_CMD_MODULE_LCD_BACKLIGHT;
  87.         txMsg.Length = 1;
  88.  
  89.         txMsg.Data[0] = OCR1AL;
  90.  
  91.         StdCan_Put(&txMsg);
  92.         break;
  93.         }
  94.     }
  95. }
  96.  
  97. void act_hd44780_List(uint8_t ModuleSequenceNumber)
  98. {
  99.     StdCan_Msg_t txMsg;
  100.  
  101.     StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_ACT);
  102.     StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  103.     txMsg.Header.ModuleType = CAN_TYPE_MODULE_act_hd44789;
  104.     txMsg.Header.ModuleId = act_hd44780_ID;
  105.     txMsg.Header.Command = CAN_CMD_MODULE_NMT_LIST;
  106.     txMsg.Length = 6;
  107.  
  108.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  109.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  110.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  111.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  112.  
  113.     txMsg.Data[4] = NUMBER_OF_MODULES;
  114.     txMsg.Data[5] = ModuleSequenceNumber;
  115.  
  116.     StdCan_Put(&txMsg);
  117. }
  118.