Example #1
0
        private List <ProgramError> CompileArduino(ProgramBlock program)
        {
            List <ProgramError> errors = new List <ProgramError>();

            // Generate, compile and upload Arduino Sketch
            string sketchFileName = ArduinoAppFactory.GetSketchFile(program.Address.ToString());

            if (!Directory.Exists(Path.GetDirectoryName(sketchFileName)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(sketchFileName));
            }
            string sketchMakefile = Path.Combine(Path.GetDirectoryName(sketchFileName), "Makefile");

            try
            {
                // .ino source is stored in the ScriptSource property
                File.WriteAllText(sketchFileName, program.ScriptSource);
                // Makefile source is stored in the ScriptCondition property
                File.WriteAllText(sketchMakefile, program.ScriptCondition);
                errors = ArduinoAppFactory.CompileSketch(sketchFileName, sketchMakefile);
            }
            catch (Exception e)
            {
                errors.Add(new ProgramError()
                {
                    Line         = 0,
                    Column       = 0,
                    ErrorMessage = "General failure: is 'arduino-mk' package installed?\n\n" + e.Message,
                    ErrorNumber  = "500",
                    CodeBlock    = "CR"
                });
            }

            return(errors);
        }
Example #2
0
        internal MethodRunResult Run(string options)
        {
            MethodRunResult result = null;

            switch (codeType.ToLower())
            {
            case "python":
                string       pythonScript = this.ScriptSource;
                ScriptEngine pythonEngine = (scriptEngine as ScriptEngine);
                result = new MethodRunResult();
                try
                {
                    pythonEngine.Execute(pythonScript, scriptScope);
                }
                catch (Exception e)
                {
                    result.Exception = e;
                }
                break;

            case "ruby":
                string       rubyScript = this.ScriptSource;
                ScriptEngine rubyEngine = (scriptEngine as ScriptEngine);
                result = new MethodRunResult();
                try
                {
                    rubyEngine.Execute(rubyScript, scriptScope);
                }
                catch (Exception e)
                {
                    result.Exception = e;
                }
                break;

            case "javascript":
                string      jsScript = this.ScriptSource;
                Jint.Engine engine   = (scriptEngine as Jint.Engine);
                //engine.Options.AllowClr(false);
                result = new MethodRunResult();
                try
                {
                    engine.Execute(jsScript);
                }
                catch (Exception e)
                {
                    result.Exception = e;
                }
                break;

            case "csharp":
                if (appAssembly != null && CheckAppInstance())
                {
                    result = (MethodRunResult)methodRun.Invoke(assembly, new object[1] {
                        options
                    });
                }
                break;

            case "arduino":
                result = new MethodRunResult();
                homegenie.LogBroadcastEvent(
                    Domains.HomeAutomation_HomeGenie_Automation,
                    this.Address.ToString(),
                    "Arduino Sketch Upload",
                    "Arduino.UploadOutput",
                    "Upload started"
                    );
                string[] outputResult = ArduinoAppFactory.UploadSketch(Path.Combine(
                                                                           AppDomain.CurrentDomain.BaseDirectory,
                                                                           "programs",
                                                                           "arduino",
                                                                           this.Address.ToString()
                                                                           )).Split('\n');
                //
                for (int x = 0; x < outputResult.Length; x++)
                {
                    if (!String.IsNullOrWhiteSpace(outputResult[x]))
                    {
                        homegenie.LogBroadcastEvent(
                            Domains.HomeAutomation_HomeGenie_Automation,
                            this.Address.ToString(),
                            "Arduino Sketch",
                            "Arduino.UploadOutput",
                            outputResult[x]
                            );
                        Thread.Sleep(500);
                    }
                }
                //
                homegenie.LogBroadcastEvent(
                    Domains.HomeAutomation_HomeGenie_Automation,
                    this.Address.ToString(),
                    "Arduino Sketch",
                    "Arduino.UploadOutput",
                    "Upload finished"
                    );
                break;
            }
            //
            return(result);
        }