## 3 Charging-Aware Multi-Mode Routing Protocol
### Charging-Aware Multi-Mode Routing Protocol (CMRP)  
Each sensor maintains several different propagation targets for different charging status. When a sensor is not within the sunlight coverage, it needs to save as more energy as possible. The minimum-transmitting spanning tree (MSTP) with sink as the root is the best solution. This method can reduce the propagation distance to save energy. [27]. All sensors are included to construct the minimum spanning tree (MST). Each sensor \(S\) stores its parent node, denoted as \(P(S)\), according to the established MST. The purpose that includes all sensors to construct the MST instead of only the type3 ones is to shorten the distance between the linked sensors. Because the sunlight coverage transfers periodically, involving all sensors to build the MST can help sensors reduce the propagation distance to the adjacent type of sensors. Thus, the next hop that sensor \(S\) passes its data to sink, denoted as \(S^{*}\), is represented as (3). \[S^{*}=P(S),cls(S)\in type-3 \tag{3}\]  
Next, all type1 and type2 sensors are included to build the circular chain. Involving two types of sensors can reduce the average data propagation distance of the type2 sensors. Furthermore, the type1 sensors which have plenty of energy can be selected the leader to prolong the operation time. Let \(C=\{v_{1},v_{2},v_{3},\ldots,v_{n}\}\) be the built circular chain with \(n\) sensors in it. The leader, denoted as \(v^{L}\), is selected based on the Equation (4). \[v^{L}\ =Max_{i}^{n}(E(v_{i})+Ec(v_{i}))|v_{i}\in C \tag{4}\]  
where \(E(v_{i})\) is the residual energy of sensor \(v_{i}\) and \(E_{c}(v_{i})\) is the amount of replenished energy that sensor \(v_{i}\) charges from current time to the end of the charging period. Furthermore, instead of using the regular hop by hop propagation on the circular chain, the CMRP does some modifications to reduce the propagation delay. The sensor \(v_{i}\) is the current leader of the circular chain \(C\). Sensor \(v_{j}\) requires finding its next hop, denoted as sensor \(v_{j}^{*}\), to deliver its data to sink. Let \(m_{\Delta}=\left[\frac{n}{2}\right]-i\). \(m_{\Delta}\) is the offset to adjust the leader to the middle position on the chain \(C\). The adjust position of the sensor \(v_{i}\) will be \(v_{im}\), where \(im=i+m_{\Delta}\) and the adjust position of the sensor \(v_{j}\) will be \(v_{jm}\) where \(jm=(j+m_{\Delta}+n)\ mod\ n\). For the given sensor \(v_{j}\), its \(v_{j}^{*}\), is computed as (5) to half the number of data propagation hops in the chain-based protocols [24]. \[v_{j}^{*}=S_{k}^{*},\ where\ k=\left\{ \begin{array}{rl}(j+n+1)mod\ n,&j_{m }<\left[\frac{k}{2}\right]\\ (j+n-1)mod\ n,&j_{m}>\left[\frac{k}{2}\right]\end{array} \right. \tag{5}\]  
However, in this paper, sensors are rechargeable. This circular chain involves the type1 and type2 sensors. It is possible that a type1 sensor maps to a type2 receiver. For preventing the type2 sensor from consuming its energy, the type1 sensor will stop forwarding the data to its type2 receiver but storing in its local buffer. A special case is that the distance from sensor \(v_{j}\) to the sink \(S_{s}\) is closer than that to the sensor \(v_{j}\) * The sensor \(v_{j}\), in this case, will directly send its data to sink. The corresponding \(v_{j}\) * is represented as (6). \[v_{j}^{*}=\left\{ \begin{array}{c}\mathrm{S}_{\Delta}\mid\min_{S_{\Delta}\in \left(S_{k}^{*},S_{s}\right)}\left(\left|v_{j}S_{\Delta}\right|\right)\,,\ if\ cls\big{(}v_{j}\big{)}<\ cls\big{(}v_{j+1}\big{)}\\ \ S_{k}^{*}\,\ if\ cls\big{(}v_{j}\big{)}=\ cls\big{(}v_{j+1}\big{)}\\ null\,\ if\ cls\big{(}v_{j}\big{)}>\ cls\big{(}v_{j+1}\big{)}\end{array} \right. \tag{6}\]  
where \(\ cls(v_{j})\) represents the charging type of sensor \(v_{j}\). At last, the sensors with a NULL \(v_{j}^{*}\) * use the clustering-based method to pass the data to the sink. These sensors with minimum depth in the MST are selected as the cluster heads, all sensors with NULL \(v_{j}\) * select their closest cluster head to be the propagation target.