Compared files  

Left
/fw/roborock.vacuum.a15/4.1.5_1240/xout/_root/opt/rockrobo/wlan/wifi_start.sh
Last modified2021-08-05 02:36:29
Size11.1 Kb (392 Lines)
EncodingLatin 1 - ANSI (CP1252) default
Right
/fw/roborock.vacuum.a15/4.1.5_1320/xout/_root/opt/rockrobo/wlan/wifi_start.sh
Last modified2021-10-15 04:32:14
Size13.5 Kb (447 Lines)
EncodingLatin 1 - ANSI (CP1252) default


   Comparison Statistics  

Detailed Statistics

All Changes
 BlocksLines
Unchanged23219
Inserted28
Deleted11
Ignored00
Changed19392




   Comparison Details  

1 1 #!/bin/bash
2 2  
3   3 if [ -f /mnt/reserve/device.conf ]; then
  4     DEVICE_CONF=/mnt/reserve/device.conf
  5 else
4 DEVICE_CONF=/mnt/default/device.conf 6     DEVICE_CONF=/mnt/default/device.conf
  7 fi
  8  
5 9 WIFI_CONFIG_FILE=/mnt/data/miio/wifi.conf
6 10 DEVICE_MODEL=""
7 11 SET_MAC=""
1 skipped line
9 13 WIFI_MODULE_RTW="8189es"
10 14 WIFI_MODULE_SSV="ssv6x5x"
11 15 WIFI_MODULE_HI3881="hi3881"
  16 WIFI_MODULE_BL602="bl602"
12 WIFI_MODULE_ARRAY=(${WIFI_MODULE_RTW} ${WIFI_MODULE_SSV} ${WIFI_MODULE_HI3881}) 17 WIFI_MODULE_ARRAY=(${WIFI_MODULE_RTW} ${WIFI_MODULE_SSV} ${WIFI_MODULE_HI3881} ${WIFI_MODULE_BL602})
13 18 WIFI_DIR=/mnt/data/wlan
14 19 WPA_CONF=/mnt/data/wlan/wpa_supplicant.conf
15 20 TMP_WPA_CONF=/tmp/wpa_supplicant.conf.gbk
16 INTERFACES_STA_CONF=/mnt/data/wlan/interfaces  
17 21 HOSTAPD_CONF=/tmp/hostapd.conf
18 22 DNSMASQ_CONF=/tmp/dnsmasq.conf
19 23  
13 skipped lines
33 37 clear_sevice=0
34 38 wifi_need_insmod=true
35 39 wifi_driver_exist=false
  40 FORCE_AP=0
  41 FORCE_CONN_SSID=""
  42 FORCE_CONN_PASSWD=""
36   43  
37 while getopts "dcn" name 44 while getopts "dcnAS:P:" name
38 45 do
39     case $name in 46     case $name in
  47         A)
  48             FORCE_AP=1
  49             ;;
  50         S)
  51             FORCE_CONN_SSID=${OPTARG}
  52             ;;
  53         P)
  54             FORCE_CONN_PASSWD=${OPTARG}
  55             ;;
40         d) 56         d)
41         debug_mode=1; 57             debug_mode=1;
42         ;; 58             ;;
43         c) 59         c)
44         clear_sevice=1; 60             clear_sevice=1;
45         ;; 61             ;;
46         n) 62         n)
47         wifi_need_insmod=false; 63             wifi_need_insmod=false;
48         ;; 64             ;;
49     esac 65     esac
50 66 done
51 67  
52 68 set_led ()
53 69 {
54     command="led0 $1" 70     command="led0 $1"
55     if [ -f /sys/bus/platform/devices/rr_leds/rrleds ]; then 71     if [ -f /sys/bus/platform/devices/rr_leds/rrleds ]; then
56         echo -n "$command" > /sys/bus/platform/devices/rr_leds/rrleds 72         echo -n "$command" > /sys/bus/platform/devices/rr_leds/rrleds
  73     elif [ -f sys/bus/platform/devices/0.soc:rr_wifi_leds/rrleds ]; then  #ja308 inode dir
  74         echo -n "$command" > sys/bus/platform/devices/0.soc:rr_wifi_leds/rrleds
57     fi 75     fi
58 76 }
59 77  
60 78 wifi_adjust_channel()
61 79 {
62     ifconfig wlan0 up 80     ifconfig wlan0 up
63   81  
64     cstr=`iw wlan0 scan -u | grep freq:` 82     cstr=`iw wlan0 scan -u | grep freq:`
65     local c1=`echo $cstr | grep -o 2412 | wc -l` 83     local c1=`echo $cstr | grep -o 2412 | wc -l`
66     local c6=`echo $cstr | grep -o 2437 | wc -l` 84     local c6=`echo $cstr | grep -o 2437 | wc -l`
67     local c11=`echo $cstr | grep -o 2462 | wc -l` 85     local c11=`echo $cstr | grep -o 2462 | wc -l`
68   86  
69     if [ $c1 -lt $c6 ] 87     if [ $c1 -lt $c6 ]
70     then 88     then
71         if [ $c1 -lt $c11 ] 89         if [ $c1 -lt $c11 ]
72         then 90         then
73         channel=1 91             channel=1
74         else 92         else
75         channel=11 93             channel=11
76         fi 94         fi
77     else 95     else
78         if [ $c6 -lt $c11 ] 96         if [ $c6 -lt $c11 ]
79         then 97         then
80         channel=6 98             channel=6
81         else 99         else
82         channel=11 100             channel=11
83         fi 101         fi
84     fi 102     fi
85     sed -i "s/^channel=.*/channel=$channel/" $HOSTAPD_CONF 103     sed -i "s/^channel=.*/channel=$channel/" $HOSTAPD_CONF
86 104 }
87 105  
88 106 wifi_adjust_ssid()
25 skipped lines
114 132     echo "bind-interfaces" >> ${DNSMASQ_CONF}
115 133     echo "except-interface=lo" >> ${DNSMASQ_CONF}
116 134     echo "dhcp-range=192.168.8.10, 192.168.8.100, 6h" >> ${DNSMASQ_CONF}
117   135     echo "dhcp-leasefile=/tmp/dnsmasq.leases" >> ${DNSMASQ_CONF}
118 136     wifi_adjust_channel
119 137     wifi_adjust_ssid $mac_cur
120 138 }
121 139  
122 140 wifi_ap_mode()
123 141 {
124     # AP mode 142     # AP mode
  143  
125     CMD="hostapd -B $HOSTAPD_CONF" 144     CMD="hostapd -B $HOSTAPD_CONF"
126     echo "set wifi ap mode" 145     echo "set wifi ap mode"
127     if [ $debug_mode -eq 1 ];then 146     if [ $debug_mode -eq 1 ];then
128         ${CMD} 147         ${CMD}
129     else 148     else
130         ${CMD} >/dev/null 2>&1 149         ${CMD} >/dev/null 2>&1
131     fi 150     fi
132   151  
133     ifconfig wlan0 192.168.8.1 netmask 255.255.255.0 >/dev/null 2>&1 152     ifconfig wlan0 192.168.8.1 netmask 255.255.255.0 >/dev/null 2>&1
134     dnsmasq -C ${DNSMASQ_CONF} >/dev/null 2>&1 153     dnsmasq -C ${DNSMASQ_CONF} >/dev/null 2>&1
135     set_led ap 154     set_led ap
136     sleep 1 155     sleep 1
137 156 }
138 157  
139 158 wifi_sta_mode()
140 159 {
141     if [ ! -f ${INTERFACES_STA_CONF} ]; then 160     if [ "x${FORCE_CONN_SSID}" != "x" ]; then
142         echo auto lo wlan0                      >  ${INTERFACES_STA_CONF} 161         SSID=${FORCE_CONN_SSID}
143         echo iface lo inet loopback             >> ${INTERFACES_STA_CONF} 162         SSID_NO_ESCAPE=${FORCE_CONN_SSID}
144         echo iface wlan0 inet dhcp                >> ${INTERFACES_STA_CONF} 163         PASSWD=${FORCE_CONN_PASSWD}
145         echo wpa-conf ${WPA_CONF}               >> ${INTERFACES_STA_CONF} 164     else
146     fi  
147     SSID=$(cat ${WIFI_CONFIG_FILE} | grep "^[[:space:]]*ssid="| sed 's/ssid=\"//g' |sed 's/\"$//g') 165         SSID=$(cat ${WIFI_CONFIG_FILE} | grep "^[[:space:]]*ssid="| sed 's/ssid=\"//g' |sed 's/\"$//g')
148     SSID_NO_ESCAPE=$(cat ${WIFI_CONFIG_FILE} | grep "^[[:space:]]*ssid="| sed 's/ssid=\"//g' |sed 's/\"$//g' |sed 's/\\\(.\)/\1/g') 166         SSID_NO_ESCAPE=$(cat ${WIFI_CONFIG_FILE} | grep "^[[:space:]]*ssid="| sed 's/ssid=\"//g' |sed 's/\"$//g' |sed 's/\\\(.\)/\1/g')
149     PASSWD=$(cat ${WIFI_CONFIG_FILE} | grep "^[[:space:]]*psk=" | sed 's/psk=\"//g' |sed 's/\"$//g' |sed 's/\\\(.\)/\1/g') 167         PASSWD=$(cat ${WIFI_CONFIG_FILE} | grep "^[[:space:]]*psk=" | sed 's/psk=\"//g' |sed 's/\"$//g' |sed 's/\\\(.\)/\1/g')
  168     fi
150     if [ -z "$PASSWD" ]; then 169     if [ -z "$PASSWD" ]; then
151         echo "network={"                        > $WPA_CONF 170         echo "network={"                        > $WPA_CONF
152         echo "       ssid=$SSID"                >> $WPA_CONF 171         echo "       ssid=$SSID"                >> $WPA_CONF
153         echo "       key_mgmt=NONE"             >> $WPA_CONF 172         echo "       key_mgmt=NONE"             >> $WPA_CONF
154         echo "}"                                >> $WPA_CONF 173         echo "}"                                >> $WPA_CONF
155     else 174     else
156 175         #wpa_passphrase can only handle password with lenght of 8~63
157 176         PASS_LEN=${#PASSWD}
158 177         if [ $PASS_LEN -lt 8 -o $PASS_LEN -gt 64 ]; then
159 178             PASSWD="invalidpassword"
160 179         fi
161 180  
162         #wpa_passphrase "$SSID" "$PASSWD" > $WPA_CONF 181         #wpa_passphrase "$SSID" "$PASSWD" > $WPA_CONF
163         HEX_PSK=$(wpa_passphrase "$SSID_NO_ESCAPE" "$PASSWD" |grep "^[[:space:]]psk=") 182         HEX_PSK=$(wpa_passphrase "$SSID_NO_ESCAPE" "$PASSWD" |grep "^[[:space:]]psk=")
  183         echo "ap_scan=1"                        >  $WPA_CONF
  184         #echo "network={"                        >> $WPA_CONF
  185         #echo "        ssid=P\"$SSID\""          >> $WPA_CONF
  186         #echo "        scan_ssid=1"              >> $WPA_CONF
  187         #echo "        psk=\"$PASSWD\""          >> $WPA_CONF
  188         #echo "$HEX_PSK"                         >> $WPA_CONF
  189         #echo "        key_mgmt=SAE"             >> $WPA_CONF
  190         #echo "        ieee80211w=2"             >> $WPA_CONF
164         echo "ap_scan=1"                        >  $WPA_CONF 191         #echo "}"                                >> $WPA_CONF
165         echo "network={"                        >> $WPA_CONF 192         echo "network={"                        >> $WPA_CONF
166         echo "        ssid=P\"$SSID\""          >> $WPA_CONF 193         echo "        ssid=P\"$SSID\""          >> $WPA_CONF
167         echo "        scan_ssid=1"              >> $WPA_CONF 194         echo "        scan_ssid=1"              >> $WPA_CONF
168         echo "$HEX_PSK"                         >> $WPA_CONF 195         echo "$HEX_PSK"                         >> $WPA_CONF
169         echo "}"                                >> $WPA_CONF 196         echo "}"                                >> $WPA_CONF
170     fi 197     fi
171   198  
172     rm -f ${TMP_WPA_CONF} 199     rm -f ${TMP_WPA_CONF}
173     iconv -f UTF-8 -t GBK ${WPA_CONF} -o ${TMP_WPA_CONF} 200     iconv -f UTF-8 -t GBK ${WPA_CONF} -o ${TMP_WPA_CONF}
174   201  
175     if [ $? -eq 0 ]; then 202     if [ $? -eq 0 ]; then
176         ret=`diff ${WPA_CONF} ${TMP_WPA_CONF}` 203         ret=`diff ${WPA_CONF} ${TMP_WPA_CONF}`
177         if [ $? == 1 ]; then 204         if [ $? == 1 ]; then
178         sed -i "/^[[:space:]]psk=/c\        psk=\"$PASSWD\"" ${TMP_WPA_CONF} 205             sed -i "/^[[:space:]]psk=/c\        psk=\"$PASSWD\"" ${TMP_WPA_CONF}
179         cat ${TMP_WPA_CONF} | grep -v "^[[:space:]]*ap_scan" >> ${WPA_CONF} 206             cat ${TMP_WPA_CONF} | grep -v "^[[:space:]]*ap_scan" >> ${WPA_CONF}
180         fi 207         fi
181     fi 208     fi
182   209  
183     if [ -e $DEVICE_CONF ]; then 210     if [ -e $DEVICE_CONF ]; then
184         DEVICE_MODEL=`cat $DEVICE_CONF | grep -i "^[[:space:]]*model[[:space:]]*=" | cut -d '=' -f 2` 211         DEVICE_MODEL=`cat $DEVICE_CONF | grep -i "^[[:space:]]*model[[:space:]]*=" | cut -d '=' -f 2`
185     fi 212     fi
186     if [ -z "$DEVICE_MODEL" ]; then 213     if [ -z "$DEVICE_MODEL" ]; then
187         DEVICE_MODEL="roborock.vacuum" 214         DEVICE_MODEL="roborock.vacuum"
188     fi 215     fi
189   216  
190     STA_HOST_NAME=`echo ${DEVICE_MODEL//[\.\_]/\-}` 217     STA_HOST_NAME=`echo ${DEVICE_MODEL//[\.\_]/\-}`
191     # STA mode 218     # STA mode
192     set_led blink 219     set_led blink
193     ifconfig wlan0 up 220     ifconfig wlan0 up
194     wpa_supplicant -D nl80211 -B -i wlan0 -C /var/run/wpa_supplicant -c $WPA_CONF -dt -f /var/log/syslog 221     wpa_supplicant -D nl80211 -B -i wlan0 -C /var/run/wpa_supplicant -c $WPA_CONF -dt -f /var/log/syslog
195     #udhcpc -b -i wlan0 >/dev/null 2>&1  
196     udhcpc -S -b -i wlan0 -h $STA_HOST_NAME 222     udhcpc -S -b -i wlan0 -h $STA_HOST_NAME
197     echo "set wifi sta mode" 223     echo "set wifi sta mode"
198 224 }
199 225  
200 226 wifi_prepare()
201 227 {
202     set_led off 228     set_led off
203     killall dnsmasq >/dev/null 2>&1 229     killall dnsmasq >/dev/null 2>&1
204     ifdown wlan0 > /dev/null 2>&1 230     ifdown wlan0 > /dev/null 2>&1
205     ifconfig wlan0 down > /dev/null 2>&1 231     ifconfig wlan0 down > /dev/null 2>&1
206     killall hostapd >/dev/null 2>&1 232     killall hostapd >/dev/null 2>&1
207     iw mon.wlan0 del >/dev/null 2>&1 233     iw mon.wlan0 del >/dev/null 2>&1
208     killall wpa_supplicant >/dev/null 2>&1 234     killall wpa_supplicant >/dev/null 2>&1
209     killall udhcpc >/dev/null 2>&1  235     killall udhcpc >/dev/null 2>&1 
210     if [ -e $DEVICE_CONF ]; then 236     if [ -e $DEVICE_CONF ]; then
211         SET_MAC=`cat $DEVICE_CONF | grep -i "^[[:space:]]*mac[[:space:]]*=" | cut -d '=' -f 2` 237         SET_MAC=`cat $DEVICE_CONF | grep -i "^[[:space:]]*mac[[:space:]]*=" | cut -d '=' -f 2`
212     fi 238     fi
213     if [ -e /mnt/default/roborock.conf ]; then 239     if [ -e /mnt/default/roborock.conf ]; then
214         WIFIPLAN=`cat /mnt/default/roborock.conf |grep -i "^[[:space:]]*wifiplan[[:space:]]*=" |sed -e 's/^.*=[[:space:]]*//' |sed -e 's/[[:space:]]*$//'` 240         WIFIPLAN=`cat /mnt/default/roborock.conf |grep -i "^[[:space:]]*wifiplan[[:space:]]*=" |sed -e 's/^.*=[[:space:]]*//' |sed -e 's/[[:space:]]*$//'`
215         WIFIPLAN_PREFIX=`echo $WIFIPLAN |cut -c1-2` 241         WIFIPLAN_PREFIX=`echo $WIFIPLAN |cut -c1-2`
216         WIFIPLAN_SURFIX=`echo $WIFIPLAN |cut -c3-` 242         WIFIPLAN_SURFIX=`echo $WIFIPLAN |cut -c3-`
217         if [ "x$WIFIPLAN_PREFIX" = "x0x" -o "x$WIFIPLAN_PREFIX" = "x0X" ]; then 243         if [ "x$WIFIPLAN_PREFIX" = "x0x" -o "x$WIFIPLAN_PREFIX" = "x0X" ]; then
218         SET_CHANNEL_PLAN="0x$WIFIPLAN_SURFIX" 244             SET_CHANNEL_PLAN="0x$WIFIPLAN_SURFIX"
219         fi 245         fi
220         COUNTRY_CODE=`cat /mnt/default/roborock.conf |grep -i "^[[:space:]]*location[[:space:]]*=" |sed -e 's/^.*=[[:space:]]*//' |sed -e 's/[[:space:]]*$//'` 246         COUNTRY_CODE=`cat /mnt/default/roborock.conf |grep -i "^[[:space:]]*location[[:space:]]*=" |sed -e 's/^.*=[[:space:]]*//' |sed -e 's/[[:space:]]*$//'`
221     fi 247     fi
  248 }
  249  
  250 wifi_rmmod()
  251 {
  252     wifi_module=$1
  253     echo "wifi_rmmod $wifi_module"
  254     rmmod $wifi_module -f >/dev/null 2>&1
  255     if [ $? -ne 0 ]; then
  256         rmmod $wifi_module >/dev/null 2>&1
  257     fi
  258     has_insmod=`lsmod | grep -wc "^$wifi_module"`
  259     if [ $has_insmod -gt 0 ]; then
  260         return 1
  261     fi
  262     return 0
222 263 }
223 264  
224 265 wifi_insmod()
225 266 {
226 267     wifi_module=$1 
  268     echo "wifi_insmod $wifi_module"
227 269     has_insmod=`lsmod | grep -wc "^$wifi_module"`
228 270     if [ $has_insmod -gt 0 ]; then
229         rmmod $wifi_module -f 271         wifi_rmmod $wifi_module
230 272         rm /etc/udev/rules.d/70-persistent-net.rules -rf
231 273     fi
232 274     wifi_module_with_path=`find /lib/modules/ -name ${wifi_module}.ko`
60 skipped lines
293 335                 insmod ${wifi_module_with_path} g_mode=1
294 336             fi
295 337             ;;
  338         ${WIFI_MODULE_BL602})
  339             if [ -z "$SET_MAC" ]; then
  340                 insmod ${wifi_module_with_path}
  341             else
  342                 insmod ${wifi_module_with_path} bl_initmac=$SET_MAC
  343             fi
  344             ;;
296 345         *)
297 346             return 2
298 347     esac
3 skipped lines
302 351  
303 352 wifi_start()
304 353 {
305     while $wifi_need_insmod ; do 354     while $wifi_need_insmod ; do
306         if [ -z "$SET_MAC" ]; then 355         if [ -z "$SET_MAC" ]; then
307         ifconfig wlan0 >/dev/null 2>&1 356             ifconfig wlan0 >/dev/null 2>&1
308         if [ $? -eq 0 ]; then 357             if [ $? -eq 0 ]; then
309         wifi_need_insmod=false 358                 wifi_need_insmod=false
310         break; 359                 break;
311         fi 360             fi
312         else 361         else
313         wlan0_is_set_macd=`ifconfig wlan0 2>/dev/null | grep -wic $SET_MAC` 362             wlan0_is_set_macd=`ifconfig wlan0 2>/dev/null | grep -wic $SET_MAC`
314         if [ $wlan0_is_set_macd -gt 0 ]; then 363             if [ $wlan0_is_set_macd -gt 0 ]; then
315         wifi_need_insmod=false 364                 wifi_need_insmod=false
316         break; 365                 break;
317         fi 366             fi
318         fi 367         fi
319 368         wifi_dev_found=false
320 369         for wifi_module in ${WIFI_MODULE_ARRAY[@]} ; do
321 370             if [ x"${wifi_module}" = x"${WIFI_DEV_CUR}" ]; then
4 skipped lines
326 375         if $wifi_dev_found; then
327 376             wifi_insmod ${wifi_module}
328 377         else
329             for wifi_module in ${WIFI_MODULE_ARRAY[@]} ; do 378             for wifi_module in ${WIFI_MODULE_ARRAY[@]} ; do
330 379                 wifi_insmod ${wifi_module}
331 380                 if [ $? -ne 0 ]; then
332 381                     continue
2 skipped lines
335 384                 if [ $? -eq 0 ]; then
336 385                     break
337 386                 else
338                     rmmod ${wifi_module} -f 387                     wifi_rmmod $wifi_module
339 388                 fi
340 389             done
341 390         fi
342 391     done 
  392     if [ ${FORCE_AP} -eq 0 ]; then
  393         if [ "x${FORCE_CONN_SSID}" != "x" ]; then
  394             wifi_sta_mode
  395             return 0;
  396         fi
343     if [ -e $WIFI_CONFIG_FILE ]; then 397         if [ -e $WIFI_CONFIG_FILE ]; then
344         has_ssid=`cat $WIFI_CONFIG_FILE | grep -v \^# | grep -wc ssid` 398             has_ssid=`cat $WIFI_CONFIG_FILE | grep -v \^# | grep -wc ssid`
345         if [ $has_ssid -gt 0 ]; then 399             if [ $has_ssid -gt 0 ]; then
346         wifi_sta_mode 400                 wifi_sta_mode
347         return 0 401                 return 0
348         else 402             else
349         rm $WIFI_CONFIG_FILE -rf 403                 rm $WIFI_CONFIG_FILE -rf
350         fi 404             fi
351     fi 405         fi
  406     fi
352     STRING=`ifconfig wlan0` 407     STRING=`ifconfig wlan0`
353     macstring=${STRING##*HWaddr } 408     macstring=${STRING##*HWaddr }
354     macstring=`echo ${macstring} | cut -d ' ' -f 1` 409     macstring=`echo ${macstring} | cut -d ' ' -f 1`
355   410  
356     mac1=`echo ${macstring} | cut -d ':' -f 5` 411     mac1=`echo ${macstring} | cut -d ':' -f 5`
357     mac2=`echo ${macstring} | cut -d ':' -f 6` 412     mac2=`echo ${macstring} | cut -d ':' -f 6`
358     MAC=${mac1}${mac2} 413     MAC=${mac1}${mac2}
359     wifi_init_ap_conf $MAC 414     wifi_init_ap_conf $MAC
360     wifi_ap_mode 415     wifi_ap_mode
361 416 }
362 417  
363 418 if [ ! -d ${WIFI_DIR} ]; then
364     mkdir -p ${WIFI_DIR} 419     mkdir -p ${WIFI_DIR}
365 420 fi
366 421  
367 422 if [ x"${WIFI_DEV_CUR}" = x"${WIFI_MODULE_HI3881}" ]; then
368 423     wifi_prepare
369     rmmod ${WIFI_MODULE_HI3881} -f 424     wifi_rmmod ${WIFI_MODULE_HI3881}
370 425     wifi_need_insmod=true
371 426 fi
372 427  
8 skipped lines
381 436 fi
382 437  
383 438 if [ $clear_sevice -eq 1 ]; then
384     if  $wifi_need_insmod ; then 439     if  $wifi_need_insmod ; then
385         for wifi_module in ${WIFI_MODULE_ARRAY[@]} ; do 440         for wifi_module in ${WIFI_MODULE_ARRAY[@]} ; do
386         rmmod $wifi_module >/dev/null 2>&1 441             wifi_rmmod $wifi_module
387         done 442         done
388     fi 443     fi
389     exit 0 444     exit 0
390 445 fi
391 446 wifi_start
392 447  

   Text comparison Options  

Syntax colouring language used: Shell
Match character case: yes.
Match line endings: no.
Match spaces

At start of lines: yes,
In middle of lines: yes,
At end of lines: yes.
Blank lines as empty lines: no.
Activate comparison algorithm
At word level: yes,
At character level: no.


   Legend  

Unchanged lineExample of unchanged line
Modified lineExample of modified line
Added lineExample of added line
Removed lineExample of removed line
Ignored lineExample of ignored line