kopia lustrzana https://github.com/peterhinch/micropython-samples
66 wiersze
2.6 KiB
Markdown
66 wiersze
2.6 KiB
Markdown
|
# The rshell macro fork
|
||
|
|
||
|
These notes describe one of a number of possible ways to use the macro
|
||
|
facility.
|
||
|
|
||
|
The aim was to provide a set of generic macros, along with a project specific
|
||
|
set. The starting point is an alias, run before work is started on a given
|
||
|
project. The aliases are created in `~/.bashrc`. The example below is for two
|
||
|
projects, `mqtt` and `asyn`.
|
||
|
```bash
|
||
|
alias asyn='export PROJECT=ASYN;cd /MicroPython/micropython-async/'
|
||
|
alias mqtt='export PROJECT=MQTT; cd /MicroPython/micropython-mqtt'
|
||
|
```
|
||
|
The `PROJECT` environment variable is examined by the file `rshell_macros.py`
|
||
|
located in the `rshell` directory. An example is presented here:
|
||
|
```python
|
||
|
import os
|
||
|
proj = None
|
||
|
try:
|
||
|
proj = os.environ['PROJECT']
|
||
|
except KeyError:
|
||
|
print('Environment var PROJECT not found: only generic macros loaded.')
|
||
|
|
||
|
macros = {}
|
||
|
macros['..'] = 'cd ..'
|
||
|
macros['...'] = 'cd ../..'
|
||
|
macros['ll'] = 'ls -al {}', 'List any directory'
|
||
|
macros['lf'] = 'ls -al /flash/{}'
|
||
|
macros['lsd'] = 'ls -al /sd/{}'
|
||
|
macros['lpb'] = 'ls -al /pyboard/{}'
|
||
|
macros['mv'] = 'cp {0} {1}; rm {0}', 'Move/rename'
|
||
|
macros['repl'] = 'repl ~ import machine ~ machine.soft_reset()', 'Clean REPL'
|
||
|
macros['up'] = 'cd /MicroPython'
|
||
|
macros['asyn'] = 'cd /MicroPython/micropython-async'
|
||
|
macros['primitives'] = 'cd /MicroPython/micropython-async/v3; rsync primitives/ {}/primitives; cd -', 'Copy V3 primitives to dest'
|
||
|
|
||
|
if proj == 'MQTT':
|
||
|
print('Importing macros for MQTT')
|
||
|
macros['home'] = 'cd /MicroPython/micropython-mqtt/mqtt_as'
|
||
|
elif proj == 'ASYN':
|
||
|
print('Importing macros for ASYN')
|
||
|
macros['home'] = 'cd /MicroPython/micropython-async'
|
||
|
macros['v3'] = 'cd /MicroPython/micropython-async/v3'
|
||
|
macros['off'] = 'cd /MicroPython/micropython-async/official', 'official uasyncio'
|
||
|
macros['sync'] = 'cd /MicroPython/micropython-async/v3; rsync primitives/ {}/primitives', 'Copy V3 primitives to dest'
|
||
|
macros['demos'] = 'cd /MicroPython/micropython-async/v3; rsync as_demos/ {}/as_demos', 'Copy V3 demos to dest'
|
||
|
macros['drivers'] = 'cd /MicroPython/micropython-async/v3; rsync as_drivers/ {}/as_drivers', 'Copy V3 drivers to dest'
|
||
|
```
|
||
|
The first part of the script defines generic macros such as `ll` and `lsd`
|
||
|
available to any project, and if no project is defined.
|
||
|
|
||
|
Project specific macros are added in response to the environment variable.
|
||
|
Note the way args are passed: to update the SD card on a Pyboard the macro
|
||
|
`primitives` would be called with:
|
||
|
```
|
||
|
MicroPython > m primitives /sd
|
||
|
```
|
||
|
The `mv` macro, called with
|
||
|
```
|
||
|
MicroPython > m mv source_path dest_path
|
||
|
```
|
||
|
expands to
|
||
|
```
|
||
|
cp source_path dest_path; rm source_path
|
||
|
```
|