henos
henos

Reputation: 70

Where is the Mindstorms module files stored

I would like to find out where the source code for the mindstorms module is for the Mindstorms Robot Inventor.

At the start of each file there is a starting header of

from Mindstorms import ...
Etc..

That is what I want to find.

I have tryed multiple python methods to file the file path, but they all return ./projects/8472.py

Thanks, henos

Upvotes: 1

Views: 827

Answers (1)

mmoran0032
mmoran0032

Reputation: 123

You've likely been using __file__ and similar, correct? Yes, that will give you the currently running file, but since you can't edit the code for the actual Mindstorms code, it's not helpful. Instead, you want to inspect the directory itself, like you would if your regular Python code were accessing a data file elsewhere.

Most of the internal systems are .mpy files (see http://docs.micropython.org/en/v1.12/reference/mpyfiles.html), so directly reading the code from the device is less than optimal. Additionally, this means that many "standard library" packages are missing or incomplete; you can't import pathlib but you can import os, but you can't use os.walk(). Those restrictions make any sort of directory traversal a little more frustrating, but not impossible.

For instance, the file runtime/extensions.music.mpy looks like the following (note: not copy-pasted since the application doesn't let you):

M☐☐☐ ☐☐☐
 ☐6runtime/extensions/music.py ☐☐"AbstractExtensions*☐☐$abstract_extension☐☐☐☐YT2 ☐☐MusicExtension☐☐4☐☐☐Qc ☐|
☐☐ ☐ ☐☐ ☐☐☐☐ ☐2 ☐☐play_drum2☐☐☐play_noteQc ☐d:
☐☐ *☐☐_call_sync#☐,☐+/-☐☐drumb6☐YQc☐  ☐☐drum_nos☐musicExtension.playDrum☐☐E☐
☐      *☐     #☐,☐+/-☐☐instrumentb*☐☐noteb*☐☐durationb6☐YQc☐  ☐☐☐☐s☐musicExtension.playNote

Sure, you can kind of see what's going on, but it isn't that helpful.

You'll want to use combinations of os.listdir and print here, since the MicroPython implementation doesn't give access to os.walk. Example code to get you started:

import os
import sys

print(os.uname())  # note: doesn't reflect actual OS version, see https://stackoverflow.com/questions/64449448/how-to-import-from-custom-python-modules-on-new-lego-mindstorms-robot-inventor#comment115866177_64508469

print(os.listdir("."))  # ['util', 'projects', 'runtime', ...]
print(os.listdir("runtime/extenstions"))  # ['__init__.mpy', 'abstract_extension.mpy', ...]

with open("runtime/extensions/music/mpy", "r") as f:
    for line in f:
        print(line)

sys.exit()

Again, the lack of copy-paste from the console is rough, so even when you do get to the "show contents of the file on screen" part, it's not that helpful.

One cool thing to note though is that if you load up a scratch program, you can read the code in regular .py. It's about as intelligible as you'd expect, since it uses very low-level calls and abstractions, not the hub.light_matrix.show_image("CLOCK6") that you'd normally write.

Upvotes: 1

Related Questions