Subversion Repositories HomeAutomation

Rev

Rev 996 | Rev 1356 | 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 (brightness on an oled display)
  11.     TCCR0A |= (1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  12.     TCCR0B |= (1<<CS00);
  13.     OCR0B = act_hd44780_INITIAL_CONTRAST;
  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. #if (act_hd44780_TYPE==0)
  87.             OCR1AL = rxMsg->Data[0];
  88. #else
  89.             OCR0B = rxMsg->Data[0];
  90. #endif
  91.         }
  92.  
  93.         StdCan_Msg_t txMsg;
  94.  
  95.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  96.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  97.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  98.         txMsg.Header.ModuleId = act_hd44780_ID;
  99.         txMsg.Header.Command = CAN_MODULE_CMD_HD44789_LCD_BACKLIGHT;
  100.         txMsg.Length = 1;
  101.  
  102. #if (act_hd44780_TYPE==0)
  103.             txMsg.Data[0] = OCR1AL;
  104. #else
  105.             txMsg.Data[0] = OCR0B;
  106. #endif
  107.  
  108.         StdCan_Put(&txMsg);
  109.         break;
  110.         }
  111.     }
  112. }
  113.  
  114. void act_hd44780_List(uint8_t ModuleSequenceNumber)
  115. {
  116.     StdCan_Msg_t txMsg;
  117.  
  118.     StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  119.     StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  120.     txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  121.     txMsg.Header.ModuleId = act_hd44780_ID;
  122.     txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST;
  123.     txMsg.Length = 6;
  124.  
  125.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  126.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  127.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  128.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  129.  
  130.     txMsg.Data[4] = NUMBER_OF_MODULES;
  131.     txMsg.Data[5] = ModuleSequenceNumber;
  132.  
  133.     while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  134. }
  135.