Subversion Repositories HomeAutomation

Rev

Rev 1020 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. CanNodes = new Array();
  3. CanServices = new Array();
  4. CanOfflineTimer = new Interval(offlineCheck, 10000);
  5. CanProgrammingNode = null;
  6.  
  7. function handleNMTMessage(className, commandName, data)
  8. {
  9.     var canMessage = new CanNMTMessage(className, commandName, data);
  10.  
  11.     switch (canMessage.getCommandName())
  12.     {
  13.     case "Reset":
  14.     // Someone sent a reset command... should we do something?
  15.     break;
  16.    
  17.     case "Bios_Start":
  18.     var node = CanNodes[canMessage.getData("HardwareId")];
  19.    
  20.     if (!node)
  21.     {
  22.         log("A can node with hardware id " + uint2hex(canMessage.getData("HardwareId"), 32) + " was not found, starting.\n");
  23.         node = new CanNode(canMessage.getData("HardwareId"), null);
  24.         CanNodes[canMessage.getData("HardwareId")] = node;
  25.     }
  26.    
  27.     node.handleBiosStart(canMessage.getData("BiosVersion"), canMessage.getData("HasApplication"));
  28.     break;
  29.    
  30.     case "Pgm_Start":
  31.     // Someone sent a programming start command... should we do something?
  32.     break;
  33.    
  34.     case "Pgm_Data":
  35.     // Someone sent a programming data command... should we do something?
  36.     break;
  37.    
  38.     case "Pgm_End":
  39.     // Someone sent a programming end command... should we do something?
  40.     break;
  41.    
  42.     case "Pgm_Copy":
  43.     // Someone sent a programming copy command... should we do something?
  44.     break;
  45.    
  46.     case "Pgm_Ack":
  47.     if (CanProgrammingNode)
  48.     {
  49.         CanProgrammingNode.handleAck(canMessage.getData("Data"));
  50.     }
  51.     //else
  52.     //{
  53.         // A node sent pgm ack but we are not in the progress of programming, probably to someone else
  54.     //}
  55.     break;
  56.    
  57.     case "Pgm_Nack":
  58.     if (CanProgrammingNode)
  59.     {
  60.         CanProgrammingNode.handleNack(canMessage.getData("Data"));
  61.     }
  62.     // I do not now what this is for...
  63.     break;
  64.    
  65.     case "Start_App":
  66.     // Someone sent a app start command... should we do something?
  67.     break;
  68.    
  69.     case "App_Start":
  70.     var node = CanNodes[canMessage.getData("HardwareId")];
  71.    
  72.     if (!node)
  73.     {
  74.         log("A can node with hardware id " + uint2hex(canMessage.getData("HardwareId"), 32) + " was not found, starting.\n");
  75.         node = new CanNode(canMessage.getData("HardwareId"), null);
  76.         CanNodes[canMessage.getData("HardwareId")] = node;
  77.     }
  78.    
  79.     node.handleHeartbeat();
  80.     break;
  81.    
  82.     case "Heartbeat":
  83.     var node = CanNodes[canMessage.getData("HardwareId")];
  84.    
  85.     if (!node)
  86.     {
  87.         log("A can node with hardware id " + uint2hex(canMessage.getData("HardwareId"), 32) + " was not found, starting.\n");
  88.         node = new CanNode(canMessage.getData("HardwareId"), canMessage.getData("NumberOfModules"));
  89.         CanNodes[canMessage.getData("HardwareId")] = node;
  90.     }
  91.    
  92.     node.handleHeartbeat(canMessage.getData("NumberOfModules"));
  93.     break;
  94.     }
  95. }
  96.  
  97. // This is used to send messages to the can network
  98. function sendNMTMessage(canMessage)
  99. {
  100.     sendCanNMTMessage(  canMessage.getClassName(),
  101.                 canMessage.getCommandName(),
  102.                 canMessage.getDataString());
  103. }
  104.  
  105. // This is called when a message has been received from the can network
  106. function handleMessage(className, directionFlag, moduleName, moduleId, commandName, data)
  107. {
  108.     var canMessage = new CanMessage(className, directionFlag, moduleName, moduleId, commandName, data);
  109.  
  110.     var fullId = canMessage.getModuleName() + canMessage.getModuleId();
  111.  
  112.     if (canMessage.getCommandName() == "List" && canMessage.getDirectionFlag() == "From_Owner")
  113.     {
  114.         if (!CanServices[fullId])
  115.         {
  116.             var service = ServiceManager.getService("Can", canMessage.getModuleName(), canMessage.getModuleId())
  117.  
  118.             if (service != null)
  119.             {
  120.                 var node = CanNodes[canMessage.getData("HardwareId")];
  121.  
  122.                 if (node)
  123.                 {
  124.                     service.setNode(node);
  125.                     node.addService(canMessage.getData("SequenceNumber"), service);
  126.                     CanNodes[canMessage.getData("HardwareId")] = node;
  127.                 }
  128.  
  129.                 CanServices[fullId] = service;
  130.             }
  131.             else
  132.             {
  133.                 log("No such service found: " + canMessage.getModuleName() + "\n");
  134.             }
  135.         }
  136.     }
  137.     else
  138.     {
  139.         if (CanServices[fullId])
  140.         {
  141.             // Tell the service to handle the message, a module service must implement canMessageHandler or derive from CanService-class
  142.             CanServices[fullId].canMessageHandler(canMessage);
  143.         }
  144.         else if (canMessage.getModuleName() == "Debug")
  145.         {
  146.             var service = ServiceManager.getService("Can", canMessage.getModuleName(), canMessage.getModuleId())
  147.             if (service != null)
  148.             {
  149.                 CanServices[fullId] = service;
  150.                 CanServices[fullId].canMessageHandler(canMessage);
  151.             }
  152.         }
  153.     }
  154. }
  155.  
  156. // This is used to send messages to the can network
  157. function sendMessage(canMessage)
  158. {
  159.     sendCanMessage( canMessage.getClassName(),
  160.             canMessage.getDirectionFlag(),
  161.             canMessage.getModuleName(),
  162.             canMessage.getModuleId(),
  163.             canMessage.getCommandName(),
  164.             canMessage.getDataString());
  165. }
  166.  
  167. // This will be called at reqular intervals
  168. function offlineCheck()
  169. {
  170.     for (var n in CanNodes)
  171.     {
  172.         CanNodes[n].checkOffline();
  173.     }
  174. }
  175.  
  176. function setAllOffline()
  177. {
  178.     for (var n in CanNodes)
  179.     {
  180.         CanNodes[n].setOffline();
  181.     }
  182. }
  183.