| 60 | |
| 61 | |
| 62 | class Sketch(object): |
| 63 | def __init__(self, wksp, fn): |
| 64 | self.w = wksp |
| 65 | self.filename = fn |
| 66 | self.basename = os.path.basename(self.filename) |
| 67 | self.build_log = os.path.join(self.w.log_dir, "%s.log" % (os.path.basename(self.filename),)) |
| 68 | self.build_err_log = os.path.join(self.w.log_dir, "%s.err.log" % (os.path.basename(self.filename),)) |
| 69 | self.build_upload_log = os.path.join(self.w.log_dir, "%s.upload.log" % (os.path.basename(self.filename),)) |
| 70 | |
| 71 | def build(self): |
| 72 | sys.stdout.write(" Build: ") |
| 73 | sys.stdout.flush() |
| 74 | |
| 75 | # Copy sketch over, replacing IP addresses as necessary |
| 76 | fin = open(self.filename, "r") |
| 77 | lines = fin.readlines() |
| 78 | fin.close() |
| 79 | fout = open(os.path.join(self.w.build_dir, "src", "sketch.ino"), "w") |
| 80 | for l in lines: |
| 81 | if re.match(r"^byte server\[\] = {", l): |
| 82 | fout.write("byte server[] = { %s };\n" % (settings.server_ip.replace(".", ", "),)) |
| 83 | elif re.match(r"^byte ip\[\] = {", l): |
| 84 | fout.write("byte ip[] = { %s };\n" % (settings.arduino_ip.replace(".", ", "),)) |
| 85 | else: |
| 86 | fout.write(l) |
| 87 | fout.flush() |
| 88 | fout.close() |
| 89 | |
| 90 | # Run build |
| 91 | fout = open(self.build_log, "w") |
| 92 | ferr = open(self.build_err_log, "w") |
| 93 | rc = call(["ino", "build"], stdout=fout, stderr=ferr) |
| 94 | fout.close() |
| 95 | ferr.close() |
| 96 | if rc == 0: |
| 97 | sys.stdout.write("pass") |
| 98 | sys.stdout.write("\n") |
| 99 | return True |
| 100 | else: |
| 101 | sys.stdout.write("fail") |
| 102 | sys.stdout.write("\n") |
| 103 | with open(self.build_err_log) as f: |
| 104 | for line in f: |
| 105 | print(" " + line) |
| 106 | return False |
| 107 | |
| 108 | def upload(self): |
| 109 | sys.stdout.write(" Upload: ") |
| 110 | sys.stdout.flush() |
| 111 | fout = open(self.build_upload_log, "w") |
| 112 | rc = call(["ino", "upload"], stdout=fout, stderr=fout) |
| 113 | fout.close() |
| 114 | if rc == 0: |
| 115 | sys.stdout.write("pass") |
| 116 | sys.stdout.write("\n") |
| 117 | return True |
| 118 | else: |
| 119 | sys.stdout.write("fail") |