├── flash
├── autoconfig
│ ├── etc
│ │ ├── network
│ │ │ ├── interfaces
│ │ │ └── interfaces.d
│ │ │ │ └── wlan0
│ │ ├── init.d
│ │ │ ├── S00resetbtn
│ │ │ ├── S00autoled
│ │ │ └── S96autonight
│ │ └── majestic.yaml
│ ├── usr
│ │ ├── bin
│ │ │ ├── jsonfilter
│ │ │ ├── mosquitto_pub
│ │ │ └── mosquitto_sub
│ │ ├── lib
│ │ │ ├── libubox.so
│ │ │ ├── libhive_ANR.so
│ │ │ ├── libhive_HPF.so
│ │ │ ├── libhive_RES.so
│ │ │ ├── libhive_common.so
│ │ │ └── libmosquitto.so.1
│ │ ├── share
│ │ │ └── fonts
│ │ │ │ └── truetype
│ │ │ │ └── UbuntuMono-Regular.ttf
│ │ └── sbin
│ │ │ ├── led_control.sh
│ │ │ ├── autonight.sh
│ │ │ └── autoled.sh
│ └── lib
│ │ └── modules
│ │ └── 4.9.37
│ │ └── external
│ │ └── 8189fs.ko
└── autoconfig.sh
├── usb-burn.xml
├── LICENSE
└── README.md
/flash/autoconfig/etc/network/interfaces:
--------------------------------------------------------------------------------
1 | auto lo
2 | iface lo inet loopback
3 |
4 | source-dir /etc/network/interfaces.d
5 |
--------------------------------------------------------------------------------
/flash/autoconfig/usr/bin/jsonfilter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/bin/jsonfilter
--------------------------------------------------------------------------------
/flash/autoconfig/usr/lib/libubox.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libubox.so
--------------------------------------------------------------------------------
/flash/autoconfig/usr/bin/mosquitto_pub:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/bin/mosquitto_pub
--------------------------------------------------------------------------------
/flash/autoconfig/usr/bin/mosquitto_sub:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/bin/mosquitto_sub
--------------------------------------------------------------------------------
/flash/autoconfig/usr/lib/libhive_ANR.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_ANR.so
--------------------------------------------------------------------------------
/flash/autoconfig/usr/lib/libhive_HPF.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_HPF.so
--------------------------------------------------------------------------------
/flash/autoconfig/usr/lib/libhive_RES.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_RES.so
--------------------------------------------------------------------------------
/flash/autoconfig/usr/lib/libhive_common.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_common.so
--------------------------------------------------------------------------------
/flash/autoconfig/usr/lib/libmosquitto.so.1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libmosquitto.so.1
--------------------------------------------------------------------------------
/flash/autoconfig/lib/modules/4.9.37/external/8189fs.ko:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/lib/modules/4.9.37/external/8189fs.ko
--------------------------------------------------------------------------------
/flash/autoconfig/usr/share/fonts/truetype/UbuntuMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/share/fonts/truetype/UbuntuMono-Regular.ttf
--------------------------------------------------------------------------------
/flash/autoconfig.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # First boot
4 | #
5 |
6 | # Set environments (mmz memory = 64 - osmem)
7 | fw_setenv bootargs 'mem=${osmem} console=ttyAMA0,115200 panic=20 rootfstype=squashfs root=/dev/mtdblock3 init=/init mtdparts=${mtdparts} mmz_allocator=hisi'
8 | fw_setenv osmem 35M
9 |
10 | # Enable white LED
11 | $(dirname $0)/autoconfig/usr/sbin/led_control.sh -o 1 -b 1
12 |
13 | # Wipe overlay partition and reboot
14 | flash_eraseall -j /dev/mtd4
15 | reboot
16 |
--------------------------------------------------------------------------------
/usb-burn.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/flash/autoconfig/etc/init.d/S00resetbtn:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | case "$1" in
4 | start | restart | reload)
5 | if [ ! -d /sys/class/gpio/gpio0/ ]; then
6 | echo 0 > /sys/class/gpio/export
7 | echo in > /sys/class/gpio/gpio0/direction
8 | fi
9 | printf "Checking the reset button: "
10 | if [ $(cat /sys/class/gpio/gpio0/value) -eq 0 ]; then
11 | echo "PRESSED"
12 | # Wipe overlay partition and reboot
13 | echo "Let's start wipe overlay partition (/dev/mtd4)"
14 | /usr/sbin/sysupgrade -n -z
15 | else
16 | echo "NOT PRESSED"
17 | fi
18 | exit $?
19 | ;;
20 | stop)
21 | exit 0
22 | ;;
23 | *)
24 | echo "Usage: $0 {start|stop|restart}"
25 | exit 1
26 | ;;
27 | esac
28 |
29 |
--------------------------------------------------------------------------------
/flash/autoconfig/etc/network/interfaces.d/wlan0:
--------------------------------------------------------------------------------
1 | auto wlan0
2 | iface wlan0 inet dhcp
3 | pre-up devmem 0x112C0048 32 0x1D54
4 | pre-up devmem 0x112C004C 32 0x1174
5 | pre-up devmem 0x112C0064 32 0x1174
6 | pre-up devmem 0x112C0060 32 0x1174
7 | pre-up devmem 0x112C005C 32 0x1174
8 | pre-up devmem 0x112C0058 32 0x1174
9 | pre-up devmem 0x10020028 32 0x28000000
10 | pre-up devmem 0x10020028 32 0x20000000
11 | pre-up modprobe cfg80211
12 | pre-up sleep 2
13 | pre-up insmod /lib/modules/4.9.37/external/8189fs.ko
14 | pre-up wpa_passphrase "myssid" "mypassword" >/tmp/wpa_supplicant.conf
15 | pre-up sed -i '2i \\tscan_ssid=1' /tmp/wpa_supplicant.conf
16 | pre-up sleep 3
17 | pre-up wpa_supplicant -B -D nl80211 -i wlan0 -c/tmp/wpa_supplicant.conf
18 | post-down killall -q wpa_supplicant
19 |
--------------------------------------------------------------------------------
/flash/autoconfig/etc/init.d/S00autoled:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | AUTOLED_ARGS=""
4 | AUTOLED_PID_FILE=/var/run/autoled.pid
5 |
6 | start() {
7 | printf "Starting automatic LED control: "
8 | umask 077
9 | start-stop-daemon -b -m -S -q -p $AUTOLED_PID_FILE \
10 | --exec /usr/sbin/autoled.sh -- $AUTOLED_ARGS
11 | [ $? = 0 ] && echo "OK" || echo "FAIL"
12 | }
13 |
14 | stop() {
15 | printf "Stopping automatic LED control: "
16 | start-stop-daemon -K -q -p $AUTOLED_PID_FILE
17 | [ $? = 0 ] && echo "OK" || echo "FAIL"
18 | }
19 |
20 | restart() {
21 | stop
22 | start
23 | }
24 |
25 | case "$1" in
26 | start)
27 | start
28 | ;;
29 | stop)
30 | stop
31 | ;;
32 | restart | reload)
33 | restart
34 | ;;
35 | *)
36 | echo "Usage: $0 {start|stop|restart}"
37 | exit 1
38 | ;;
39 | esac
40 |
41 | exit $?
42 |
--------------------------------------------------------------------------------
/flash/autoconfig/etc/init.d/S96autonight:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | AUTONIGHT_ARGS=""
4 | AUTONIGHT_PID_FILE=/var/run/autonight.pid
5 |
6 | start() {
7 | printf "Starting automatic night mode changer: "
8 | umask 077
9 | start-stop-daemon -b -m -S -q -p $AUTONIGHT_PID_FILE \
10 | --exec /usr/sbin/autonight.sh -- $AUTONIGHT_ARGS
11 | [ $? = 0 ] && echo "OK" || echo "FAIL"
12 | }
13 |
14 | stop() {
15 | printf "Stopping automatic night mode changer: "
16 | start-stop-daemon -K -q -p $AUTONIGHT_PID_FILE
17 | [ $? = 0 ] && echo "OK" || echo "FAIL"
18 | }
19 |
20 | restart() {
21 | stop
22 | start
23 | }
24 |
25 | case "$1" in
26 | start)
27 | start
28 | ;;
29 | stop)
30 | stop
31 | ;;
32 | restart | reload)
33 | restart
34 | ;;
35 | *)
36 | echo "Usage: $0 {start|stop|restart}"
37 | exit 1
38 | ;;
39 | esac
40 |
41 | exit $?
42 |
--------------------------------------------------------------------------------
/flash/autoconfig/usr/sbin/led_control.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # LED control for Xiaomi MJSXJ02HL
4 |
5 | show_help() {
6 | echo "Usage: $0 [-o <0|1>] [-b <0|1>]
7 | -o <0|1> Switch state for orange LED.
8 | -b <0|1> Switch state for blue LED."
9 | exit 0
10 | }
11 |
12 | led_control() {
13 | echo "Switching LED with GPIO${1} to state ${2}"
14 | if [ ! -d /sys/class/gpio/gpio${1}/ ]; then
15 | echo ${1} > /sys/class/gpio/export
16 | echo out > /sys/class/gpio/gpio${1}/direction
17 | fi
18 | echo ${2} > /sys/class/gpio/gpio${1}/value
19 | }
20 |
21 | if [ $# -eq 0 ]; then show_help; fi
22 | while getopts o:b: flag; do
23 | case ${flag} in
24 | o)
25 | [ ${OPTARG} -eq 0 -o ${OPTARG} -eq 1 ] || show_help
26 | led_control 52 ${OPTARG}
27 | ;;
28 | b)
29 | [ ${OPTARG} -eq 0 -o ${OPTARG} -eq 1 ] || show_help
30 | led_control 53 ${OPTARG}
31 | ;;
32 | *) show_help ;;
33 | esac
34 | done
35 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 OpenIPC
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/flash/autoconfig/etc/majestic.yaml:
--------------------------------------------------------------------------------
1 | system:
2 | buffer: 1024
3 | staticDir: /var/www/majestic
4 | isp:
5 | iqProfile: /etc/sensors/iq/f23.ini
6 | image:
7 | mirror: true
8 | flip: true
9 | rotate: none
10 | contrast: 50
11 | hue: 50
12 | saturation: 50
13 | luminance: 50
14 | osd:
15 | enabled: false
16 | template: "OpenIPC v.2.2 | %F %T %Z"
17 | nightMode:
18 | enabled: true
19 | irCutPin1: 70
20 | irCutPin2: 68
21 | backlightPin: 54
22 | dncDelay: 10
23 | records:
24 | enabled: false
25 | path: /mnt/mmcblk0p1/%Y/%m/%d/%H/%M.mp4
26 | maxUsage: 95
27 | video0:
28 | enabled: true
29 | codec: h264
30 | video1:
31 | enabled: false
32 | jpeg:
33 | enabled: true
34 | mjpeg:
35 | size: 640x360
36 | fps: 5
37 | bitrate: 2048
38 | audio:
39 | enabled: true
40 | volume: 70
41 | srate: 8000
42 | codec: pcm
43 | outputEnabled: true
44 | speakerPin: 55
45 | speakerPinInvert: false
46 | voiceEqualizer: common
47 | rtsp:
48 | enabled: true
49 | port: 554
50 | hls:
51 | enabled: false
52 | youtube:
53 | enabled: false
54 | motionDetect:
55 | enabled: false
56 | visualize: true
57 | debug: true
58 | ipeye:
59 | enabled: false
60 | netip:
61 | enabled: false
62 | user: admin
63 | password: 12345
64 | port: 34567
65 | snapshots: true
66 | ignoreSetTime: false
67 | onvif:
68 | enabled: false
69 | watchdog:
70 | enabled: true
71 | timeout: 30
72 |
--------------------------------------------------------------------------------
/flash/autoconfig/usr/sbin/autonight.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # Majestic settinfs for Xiaomi MJSXJ02HL
4 | #
5 | # nightMode:
6 | # enabled: true
7 | # irCutPin1: 70
8 | # irCutPin2: 68
9 | # backlightPin: 54
10 |
11 | again_high_target=14000
12 | again_low_target=2000
13 | pollingInterval=5
14 |
15 | show_help() {
16 | echo "Usage: $0 [-H value] [-L value] [-i value] [-h]
17 | -H value Again high target (default = ${again_high_target}).
18 | -L value Again low target (default = ${again_low_target}).
19 | -i value Polling interval (default = ${pollingInterval}).
20 | -h Show this help."
21 | exit 0
22 | }
23 |
24 | while getopts H:L:i:h flag; do
25 | case ${flag} in
26 | H) again_high_target=${OPTARG} ;;
27 | L) again_low_target=${OPTARG} ;;
28 | i) pollingInterval=${OPTARG} ;;
29 | h | *) show_help ;;
30 | esac
31 | done
32 |
33 | echo "...................."
34 | echo "Watching at isp_again > ${again_high_target} to enable night mode"
35 | echo "Watching at isp_again < ${again_low_target} to disable night mode"
36 | echo "Polling interval: ${pollingInterval} sec"
37 | echo "...................."
38 |
39 | login=$(cat /etc/httpd.conf | grep cgi-bin | cut -d':' -f2)
40 | pass=$(cat /etc/httpd.conf | grep cgi-bin | cut -d':' -f3)
41 |
42 | while true; do
43 | metrics=$(curl -s http://localhost/metrics)
44 | isp_again=$(echo "${metrics}" | awk '/^isp_again/ {print $2}' | grep . || echo 0)
45 | night_enabled=$(echo "${metrics}" | awk '/^night_enabled/ {print $2}' | grep . || echo 0)
46 |
47 | if [ $night_enabled -ne 1 ] && [ $isp_again -gt $again_high_target ]; then
48 | curl -s -u $login:$pass http://localhost/night/on
49 | echo "Condition isp_again > ${again_high_target} was met (current value is ${isp_again}), turn on the night mode"
50 | elif [ $night_enabled -ne 0 ] && [ $isp_again -lt $again_low_target ]; then
51 | curl -s -u $login:$pass http://localhost/night/off
52 | echo "Condition isp_again < ${again_low_target} was met (current value is ${isp_again}), turn off the night mode"
53 | fi
54 |
55 | sleep $pollingInterval
56 | done
57 |
--------------------------------------------------------------------------------
/flash/autoconfig/usr/sbin/autoled.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # Automatic LED control for Xiaomi MJSXJ02HL
4 |
5 | streamerProcess="majestic"
6 | serviceProcess="sysupgrade"
7 | pollingInterval=1
8 |
9 | show_help() {
10 | echo "Usage: $0 [-p process] [-s process] [-i value] [-h]
11 | -p process Name of the monitored streamer process (default = ${streamerProcess}).
12 | -s process Name of the monitored service process (default = ${serviceProcess}).
13 | -i value Polling interval in seconds (default = ${pollingInterval}).
14 | -h Show this help."
15 | exit 0
16 | }
17 |
18 | # override config values with command line arguments
19 | while getopts H:L:i:h flag; do
20 | case ${flag} in
21 | p) streamerProcess=${OPTARG} ;;
22 | s) serviceProcess=${OPTARG} ;;
23 | i) pollingInterval=${OPTARG} ;;
24 | h | *) show_help ;;
25 | esac
26 | done
27 |
28 | echo "...................."
29 | echo "Name of the monitored streamer process: ${streamerProcess}"
30 | echo "Name of the monitored service process: ${serviceProcess}"
31 | echo "Polling interval: ${pollingInterval} sec"
32 | echo "...................."
33 |
34 | led_state=0
35 | /usr/sbin/led_control.sh -o 0 -b 0
36 | echo "...................."
37 |
38 | while true; do
39 | if killall -q -0 $serviceProcess; then
40 | if [ $led_state -ne 3 ]; then
41 | echo "Process $serviceProcess is running, turn on the white LED"
42 | /usr/sbin/led_control.sh -o 1 -b 1
43 | led_state=3
44 | echo "...................."
45 | fi
46 | else
47 | if [ $led_state -ne 1 ] && ! killall -q -0 $streamerProcess; then
48 | echo "Process $streamerProcess is not running, turn on the orange LED"
49 | /usr/sbin/led_control.sh -o 1 -b 0
50 | led_state=1
51 | echo "...................."
52 | elif [ $led_state -ne 2 ] && killall -q -0 $streamerProcess; then
53 | echo "Process $streamerProcess is running, turn on the blue LED"
54 | /usr/sbin/led_control.sh -o 0 -b 1
55 | led_state=2
56 | echo "...................."
57 | fi
58 | fi
59 | sleep $pollingInterval
60 | done
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## OpenIPC for Xiaomi MJSXJ02HL
2 |
3 |
4 | ### Installation
5 |
6 | 1. Download the latest version of the [Zadig](https://zadig.akeo.ie) program. Run it and turn on the full list of devices (`Settings -> List of all devices`).
7 | 2. Connect the camera to the USB port of the computer (the wire that comes with the kit will not work - there are no data contacts in it) with the Reset button pressed, select the `HiUSBBurn` device from the list as quickly as possible and install the `libusbK` driver for it. Most likely you will not succeed the first time (the device disappears after a few seconds, you need to do everything very quickly).
8 | 3. Download the [HiTool](http://www.hihope.org/en/download/download.aspx?mtt=36) program. After its launch, select the `Hi3518EV300` chip. Having opened the HiBurn tool, select the [partition table file](https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/usb-burn.xml) and specify the path to the [fastboot](https://github.com/OpenIPC/firmware/releases/download/latest/u-boot-hi3518ev300-universal.bin), [kernel and rootfs](https://github.com/OpenIPC/firmware/releases/download/latest/openipc.hi3518ev300-nor-lite.tgz) files.
9 | 4. Press `Burn` button, agree that some sections will be erased and connect the camera to USB with the Reset button pressed. If everything was done correctly, then the flashing process will begin. This usually takes about a minute and ends with an informational success message.
10 |
11 |
12 | ### Configuration
13 |
14 | 1. Create two `VFAT` partitions on your SD card (disable the quick format option).
15 | 2. [Download](https://github.com/OpenIPC/device-mjsxj02hl/archive/refs/heads/master.zip) this repository and extract the contents of directory `flash` to the root of the first partition of your SD card.
16 | 3. Using [Notepad++](https://notepad-plus-plus.org), open file `autoconfig/etc/network/interfaces.d/wlan0` and change the [SSID and password](https://github.com/OpenIPC/device-mjsxj02hl/blob/master/flash/autoconfig/etc/network/interfaces.d/wlan0#L14) of the Wi-Fi access point to your own (by default, these are `myssid` and `mypassword`).
17 | 4. Turn off the camera's power, insert the SD card and turn it on again. If you did everything correctly, after a while (1-2 minutes) you will hear a shutter click and the camera will connect to your Wi-Fi network.
18 | 5. Remove the SD card and reboot the device.
19 |
20 |
21 | ### Using
22 |
23 | * Status of the built-in LEDs:
24 | * *Orange* - The system is not loaded or Majestic is not running.
25 | * *Blue* - The system is loaded and Majestic is running.
26 | * *White* - The sysupgrade utility is running (install updates or wipe overlay partition).
27 | * Web Interface is available on port 85 as http://camera-ip:85.
28 | * Default login and password are `admin` and `12345`, respectively.
29 | * SSH access available as `ssh root@`, there is no password by default.
30 | * After changing the password in the web, it also changes for the console.
31 | * Majestic Endpoints here - https://openipc.org/majestic-endpoints
32 | * Disable built-in LEDs `chmod -x /etc/init.d/S00autoled` and `chmod +x /etc/init.d/S00autoled` for enable it.
33 | * Disable automatic night mode `chmod -x /etc/init.d/S96autonight` and `chmod +x /etc/init.d/S96autonight` for enable it.
34 | * To reset the settings, hold down the Reset button, turn on the camera and wait for the white LED to light up.
35 | * You can find more information about using OpenIPC in our [Wiki](https://wiki.openipc.org).
36 |
37 |
38 | ### Bug reports
39 |
40 | * OpenIPC (firmware, packages, hardware): [https://github.com/OpenIPC/firmware/issues](https://github.com/OpenIPC/firmware/issues)
41 | * Majestic (streamer - sound, video, etc.): [https://github.com/OpenIPC/majestic/issues](https://github.com/OpenIPC/majestic/issues)
42 | * Microbe (web interface): [https://github.com/OpenIPC/microbe-web/issues](https://github.com/OpenIPC/microbe-web/issues)
43 |
44 |
45 | ### References to the previous project
46 |
47 | * [MJSXJ02HL application](https://github.com/kasitoru/mjsxj02hl_application)
48 | * [Build tools for mjsxj02hl firmware](https://github.com/kasitoru/mjsxj02hl_firmware)
49 | * [WEB interface for mjsxj02hl firmware](https://github.com/kasitoru/mjsxj02hl_web)
50 | * [mjsxj02hl_uboot](https://github.com/kasitoru/mjsxj02hl_uboot)
51 | * [Прошивка для IP-камеры MJSXJ02HL с поддержкой RTSP и MQTT](https://kasito.ru/mjsxj02hl_firmware/)
52 | * [Прошивка загрузчика IP-камеры MJSXJ02HL с помощью CH341A](https://kasito.ru/proshivka-zagruzchika-ip-kamery-mjsxj02hl-s-pomoshhyu-ch341a/)
53 | * [Прошивка загрузчика IP-камеры MJSXJ02HL с помощью USB](https://kasito.ru/proshivka-zagruzchika-ip-kamery-mjsxj02hl-s-pomoshhyu-usb/)
54 | * [Прошивка загрузчика IP-камеры MJSXJ02HL с помощью MicroSD карты](https://kasito.ru/proshivka-zagruzchika-ip-kamery-mjsxj02hl-s-pomoshhyu-microsd-karty/)
55 |
56 |
--------------------------------------------------------------------------------