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); }
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); }