@@ -2191,3 +2191,44 @@ bool MyMesh::advert() {
21912191 return false ;
21922192 }
21932193}
2194+
2195+ void MyMesh::queueOutgoingMessageForBLE (const ContactInfo* contact, const ChannelDetails* channel,
2196+ const char * from_name, const char * text, uint32_t timestamp) {
2197+ int i = 0 ;
2198+ uint8_t frame[MAX_FRAME_SIZE];
2199+ bool is_channel = (channel != NULL );
2200+
2201+ if (is_channel) {
2202+ if (app_target_ver >= 3 ) {
2203+ frame[i++] = RESP_CODE_CHANNEL_MSG_RECV_V3;
2204+ frame[i++] = 0 ; frame[i++] = 0 ; frame[i++] = 0 ;
2205+ } else {
2206+ frame[i++] = RESP_CODE_CHANNEL_MSG_RECV;
2207+ }
2208+ uint8_t channel_idx = findChannelIdx (channel->channel );
2209+ frame[i++] = channel_idx;
2210+ frame[i++] = 0xFF ;
2211+ frame[i++] = TXT_TYPE_PLAIN;
2212+ memcpy (&frame[i], ×tamp, 4 ); i += 4 ;
2213+ int name_len = strlen (from_name);
2214+ if (name_len > 30 ) name_len = 30 ;
2215+ memcpy (&frame[i], from_name, name_len); i += name_len;
2216+ frame[i++] = ' :' ; frame[i++] = ' ' ;
2217+ } else if (contact) {
2218+ if (app_target_ver >= 3 ) {
2219+ frame[i++] = RESP_CODE_CONTACT_MSG_RECV_V3;
2220+ frame[i++] = 0 ; frame[i++] = 0 ; frame[i++] = 0 ;
2221+ } else {
2222+ frame[i++] = RESP_CODE_CONTACT_MSG_RECV;
2223+ }
2224+ memcpy (&frame[i], contact->id .pub_key , 6 ); i += 6 ;
2225+ frame[i++] = 0xFF ;
2226+ frame[i++] = TXT_TYPE_PLAIN;
2227+ memcpy (&frame[i], ×tamp, 4 ); i += 4 ;
2228+ }
2229+
2230+ int text_len = strlen (text);
2231+ if (i + text_len > MAX_FRAME_SIZE) text_len = MAX_FRAME_SIZE - i;
2232+ memcpy (&frame[i], text, text_len); i += text_len;
2233+ addToOfflineQueue (frame, i);
2234+ }
0 commit comments