Skip to content

Commit 44d0e06

Browse files
committed
Sub-GHz: Revert protocol diffs from old OFW PR, sync to Unleashed
1 parent e8c4530 commit 44d0e06

8 files changed

Lines changed: 103 additions & 147 deletions

File tree

lib/subghz/protocols/feron.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ SubGhzProtocolStatus
169169

170170
subghz_protocol_feron_check_remote_controller(&instance->generic);
171171
subghz_protocol_encoder_feron_get_upload(instance);
172-
instance->encoder.front = 0;
173172
instance->encoder.is_running = true;
174173
} while(false);
175174

@@ -179,7 +178,6 @@ SubGhzProtocolStatus
179178
void subghz_protocol_encoder_feron_stop(void* context) {
180179
SubGhzProtocolEncoderFeron* instance = context;
181180
instance->encoder.is_running = false;
182-
instance->encoder.front = 0;
183181
}
184182

185183
LevelDuration subghz_protocol_encoder_feron_yield(void* context) {

lib/subghz/protocols/gangqi.c

Lines changed: 30 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void* subghz_protocol_encoder_gangqi_alloc(SubGhzEnvironment* environment) {
8080
instance->generic.protocol_name = instance->base.protocol->name;
8181

8282
instance->encoder.repeat = 3;
83-
instance->encoder.size_upload = 1024;
83+
instance->encoder.size_upload = 256;
8484
instance->encoder.upload = malloc(instance->encoder.size_upload * sizeof(LevelDuration));
8585
instance->encoder.is_running = false;
8686
return instance;
@@ -187,40 +187,35 @@ static void subghz_protocol_encoder_gangqi_get_upload(SubGhzProtocolEncoderGangQ
187187

188188
size_t index = 0;
189189

190-
instance->encoder.upload[index++] =
191-
level_duration_make(false, (uint32_t)subghz_protocol_gangqi_const.te_long * 2);
192-
193-
for(size_t r = 0; r < 5; r++) {
194-
// Send key and GAP between parcels
195-
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) {
196-
if(bit_read(instance->generic.data, i - 1)) {
197-
// Send bit 1
190+
// Send key and GAP between parcels
191+
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) {
192+
if(bit_read(instance->generic.data, i - 1)) {
193+
// Send bit 1
194+
instance->encoder.upload[index++] =
195+
level_duration_make(true, (uint32_t)subghz_protocol_gangqi_const.te_long);
196+
if(i == 1) {
197+
//Send gap if bit was last
198+
instance->encoder.upload[index++] = level_duration_make(
199+
false,
200+
(uint32_t)subghz_protocol_gangqi_const.te_short * 4 +
201+
subghz_protocol_gangqi_const.te_delta);
202+
} else {
198203
instance->encoder.upload[index++] =
199-
level_duration_make(true, (uint32_t)subghz_protocol_gangqi_const.te_long);
200-
if(i == 1) {
201-
//Send gap if bit was last
202-
instance->encoder.upload[index++] = level_duration_make(
203-
false,
204-
(uint32_t)subghz_protocol_gangqi_const.te_short * 4 +
205-
subghz_protocol_gangqi_const.te_delta);
206-
} else {
207-
instance->encoder.upload[index++] = level_duration_make(
208-
false, (uint32_t)subghz_protocol_gangqi_const.te_short);
209-
}
204+
level_duration_make(false, (uint32_t)subghz_protocol_gangqi_const.te_short);
205+
}
206+
} else {
207+
// Send bit 0
208+
instance->encoder.upload[index++] =
209+
level_duration_make(true, (uint32_t)subghz_protocol_gangqi_const.te_short);
210+
if(i == 1) {
211+
//Send gap if bit was last
212+
instance->encoder.upload[index++] = level_duration_make(
213+
false,
214+
(uint32_t)subghz_protocol_gangqi_const.te_short * 4 +
215+
subghz_protocol_gangqi_const.te_delta);
210216
} else {
211-
// Send bit 0
212217
instance->encoder.upload[index++] =
213-
level_duration_make(true, (uint32_t)subghz_protocol_gangqi_const.te_short);
214-
if(i == 1) {
215-
//Send gap if bit was last
216-
instance->encoder.upload[index++] = level_duration_make(
217-
false,
218-
(uint32_t)subghz_protocol_gangqi_const.te_short * 4 +
219-
subghz_protocol_gangqi_const.te_delta);
220-
} else {
221-
instance->encoder.upload[index++] =
222-
level_duration_make(false, (uint32_t)subghz_protocol_gangqi_const.te_long);
223-
}
218+
level_duration_make(false, (uint32_t)subghz_protocol_gangqi_const.te_long);
224219
}
225220
}
226221
}
@@ -271,7 +266,6 @@ SubGhzProtocolStatus
271266

272267
subghz_protocol_gangqi_remote_controller(&instance->generic);
273268
subghz_protocol_encoder_gangqi_get_upload(instance);
274-
instance->encoder.front = 0;
275269

276270
if(!flipper_format_rewind(flipper_format)) {
277271
FURI_LOG_E(TAG, "Rewind error");
@@ -295,7 +289,6 @@ SubGhzProtocolStatus
295289
void subghz_protocol_encoder_gangqi_stop(void* context) {
296290
SubGhzProtocolEncoderGangQi* instance = context;
297291
instance->encoder.is_running = false;
298-
instance->encoder.front = 0;
299292
}
300293

301294
LevelDuration subghz_protocol_encoder_gangqi_yield(void* context) {
@@ -343,7 +336,7 @@ void subghz_protocol_decoder_gangqi_feed(void* context, bool level, volatile uin
343336
switch(instance->decoder.parser_step) {
344337
case GangQiDecoderStepReset:
345338
if((!level) && (DURATION_DIFF(duration, subghz_protocol_gangqi_const.te_long * 2) <
346-
subghz_protocol_gangqi_const.te_delta * 5)) {
339+
subghz_protocol_gangqi_const.te_delta * 3)) {
347340
//Found GAP
348341
instance->decoder.decode_data = 0;
349342
instance->decoder.decode_count_bit = 0;
@@ -377,8 +370,8 @@ void subghz_protocol_decoder_gangqi_feed(void* context, bool level, volatile uin
377370
instance->decoder.parser_step = GangQiDecoderStepSaveDuration;
378371
} else if(
379372
// End of the key
380-
DURATION_DIFF(duration, subghz_protocol_gangqi_const.te_long * 2) <
381-
subghz_protocol_gangqi_const.te_delta * 5) {
373+
(DURATION_DIFF(duration, subghz_protocol_gangqi_const.te_long * 2) <
374+
subghz_protocol_gangqi_const.te_delta * 3)) {
382375
//Found next GAP and add bit 0 or 1 (only bit 0 was found on the remotes)
383376
if((DURATION_DIFF(
384377
instance->decoder.te_last, subghz_protocol_gangqi_const.te_short) <

lib/subghz/protocols/hollarm.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ SubGhzProtocolStatus
267267

268268
subghz_protocol_hollarm_remote_controller(&instance->generic);
269269
subghz_protocol_encoder_hollarm_get_upload(instance);
270-
instance->encoder.front = 0;
271270

272271
if(!flipper_format_rewind(flipper_format)) {
273272
FURI_LOG_E(TAG, "Rewind error");
@@ -291,7 +290,6 @@ SubGhzProtocolStatus
291290
void subghz_protocol_encoder_hollarm_stop(void* context) {
292291
SubGhzProtocolEncoderHollarm* instance = context;
293292
instance->encoder.is_running = false;
294-
instance->encoder.front = 0;
295293
}
296294

297295
LevelDuration subghz_protocol_encoder_hollarm_yield(void* context) {

lib/subghz/protocols/keeloq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ static uint32_t subghz_protocol_keeloq_check_remote_controller_selector(
10421042
man =
10431043
subghz_protocol_keeloq_common_normal_learning(fix, manufacture_code->key);
10441044
decrypt = subghz_protocol_keeloq_common_decrypt(hop, man);
1045-
if(strcmp(furi_string_get_cstr(manufacture_code->name), "Centurion") == 0) {
1045+
if((strcmp(furi_string_get_cstr(manufacture_code->name), "Centurion") == 0)) {
10461046
if(subghz_protocol_keeloq_check_decrypt_centurion(instance, decrypt, btn)) {
10471047
*manufacture_name = furi_string_get_cstr(manufacture_code->name);
10481048
keystore->mfname = *manufacture_name;

lib/subghz/protocols/legrand.c

Lines changed: 22 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ void* subghz_protocol_encoder_legrand_alloc(SubGhzEnvironment* environment) {
8585
instance->generic.protocol_name = instance->base.protocol->name;
8686

8787
instance->encoder.repeat = 3;
88-
instance->encoder.size_upload =
89-
(subghz_protocol_legrand_const.min_count_bit_for_found * 6) * 2 + 2;
88+
instance->encoder.size_upload = subghz_protocol_legrand_const.min_count_bit_for_found * 2 + 1;
9089
instance->encoder.upload = malloc(instance->encoder.size_upload * sizeof(LevelDuration));
9190
instance->encoder.is_running = false;
9291
return instance;
@@ -107,50 +106,31 @@ void subghz_protocol_encoder_legrand_free(void* context) {
107106
static bool subghz_protocol_encoder_legrand_get_upload(SubGhzProtocolEncoderLegrand* instance) {
108107
furi_assert(instance);
109108

110-
//size_t size_upload = (instance->generic.data_count_bit * 2) + 1;
111-
//if(size_upload != instance->encoder.size_upload) {
112-
// FURI_LOG_E(TAG, "Invalid data bit count");
113-
// return false;
114-
//}
109+
size_t size_upload = (instance->generic.data_count_bit * 2) + 1;
110+
if(size_upload != instance->encoder.size_upload) {
111+
FURI_LOG_E(TAG, "Invalid data bit count");
112+
return false;
113+
}
115114

116115
size_t index = 0;
117116

118-
for(size_t r = 0; r < 5; r++) {
119-
// Send sync
120-
instance->encoder.upload[index++] =
121-
level_duration_make(false, (uint32_t)instance->te * 16); // 5728
122-
// Send key data
123-
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) {
124-
if(bit_read(instance->generic.data, i - 1)) {
125-
// send bit 1
126-
if(i == instance->generic.data_count_bit) {
127-
//Send first bit
128-
instance->encoder.upload[index++] =
129-
level_duration_make(true, (uint32_t)instance->te * 3);
130-
} else {
131-
// send bit 1 regular
132-
instance->encoder.upload[index++] =
133-
level_duration_make(false, (uint32_t)instance->te);
134-
instance->encoder.upload[index++] =
135-
level_duration_make(true, (uint32_t)instance->te * 3);
136-
}
137-
} else {
138-
// send bit 0
139-
if(i == instance->generic.data_count_bit) {
140-
//Send first bit
141-
instance->encoder.upload[index++] =
142-
level_duration_make(true, (uint32_t)instance->te);
143-
} else {
144-
// send bit 0 regular
145-
instance->encoder.upload[index++] =
146-
level_duration_make(false, (uint32_t)instance->te * 3);
147-
instance->encoder.upload[index++] =
148-
level_duration_make(true, (uint32_t)instance->te);
149-
}
150-
}
117+
// Send sync
118+
instance->encoder.upload[index++] = level_duration_make(false, (uint32_t)instance->te * 16);
119+
120+
// Send key data
121+
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) {
122+
if(bit_read(instance->generic.data, i - 1)) {
123+
// send bit 1
124+
instance->encoder.upload[index++] = level_duration_make(false, (uint32_t)instance->te);
125+
instance->encoder.upload[index++] =
126+
level_duration_make(true, (uint32_t)instance->te * 3);
127+
} else {
128+
// send bit 0
129+
instance->encoder.upload[index++] =
130+
level_duration_make(false, (uint32_t)instance->te * 3);
131+
instance->encoder.upload[index++] = level_duration_make(true, (uint32_t)instance->te);
151132
}
152133
}
153-
instance->encoder.size_upload = index;
154134

155135
return true;
156136
}
@@ -243,7 +223,7 @@ void subghz_protocol_decoder_legrand_feed(void* context, bool level, uint32_t du
243223
switch(instance->decoder.parser_step) {
244224
case LegrandDecoderStepReset:
245225
if(!level && DURATION_DIFF(duration, subghz_protocol_legrand_const.te_short * 16) <
246-
subghz_protocol_legrand_const.te_delta * 8) { // 6000 +- 1200
226+
subghz_protocol_legrand_const.te_delta * 8) {
247227
instance->decoder.parser_step = LegrandDecoderStepFirstBit;
248228
instance->decoder.decode_data = 0;
249229
instance->decoder.decode_count_bit = 0;

lib/subghz/protocols/marantec24.c

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void* subghz_protocol_encoder_marantec24_alloc(SubGhzEnvironment* environment) {
7676
instance->generic.protocol_name = instance->base.protocol->name;
7777

7878
instance->encoder.repeat = 3;
79-
instance->encoder.size_upload = 512;
79+
instance->encoder.size_upload = 256;
8080
instance->encoder.upload = malloc(instance->encoder.size_upload * sizeof(LevelDuration));
8181
instance->encoder.is_running = false;
8282
return instance;
@@ -97,40 +97,36 @@ static void
9797
subghz_protocol_encoder_marantec24_get_upload(SubGhzProtocolEncoderMarantec24* instance) {
9898
furi_assert(instance);
9999
size_t index = 0;
100-
// Send initial GAP to trigger decoder
101-
instance->encoder.upload[index++] =
102-
level_duration_make(false, (uint32_t)subghz_protocol_marantec24_const.te_long * 9);
103-
for(size_t r = 0; r < 4; r++) {
104-
// Send key and GAP
105-
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) {
106-
if(bit_read(instance->generic.data, i - 1)) {
107-
// Send bit 1
108-
instance->encoder.upload[index++] =
109-
level_duration_make(true, (uint32_t)subghz_protocol_marantec24_const.te_short);
110-
if(i == 1) {
111-
//Send gap if bit was last
112-
instance->encoder.upload[index++] = level_duration_make(
113-
false,
114-
(uint32_t)subghz_protocol_marantec24_const.te_long * 9 +
115-
subghz_protocol_marantec24_const.te_short);
116-
} else {
117-
instance->encoder.upload[index++] = level_duration_make(
118-
false, (uint32_t)subghz_protocol_marantec24_const.te_long * 2);
119-
}
100+
101+
// Send key and GAP
102+
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) {
103+
if(bit_read(instance->generic.data, i - 1)) {
104+
// Send bit 1
105+
instance->encoder.upload[index++] =
106+
level_duration_make(true, (uint32_t)subghz_protocol_marantec24_const.te_short);
107+
if(i == 1) {
108+
//Send gap if bit was last
109+
instance->encoder.upload[index++] = level_duration_make(
110+
false,
111+
(uint32_t)subghz_protocol_marantec24_const.te_long * 9 +
112+
subghz_protocol_marantec24_const.te_short);
120113
} else {
121-
// Send bit 0
122-
instance->encoder.upload[index++] =
123-
level_duration_make(true, (uint32_t)subghz_protocol_marantec24_const.te_long);
124-
if(i == 1) {
125-
//Send gap if bit was last
126-
instance->encoder.upload[index++] = level_duration_make(
127-
false,
128-
(uint32_t)subghz_protocol_marantec24_const.te_long * 9 +
129-
subghz_protocol_marantec24_const.te_short); // 15200
130-
} else {
131-
instance->encoder.upload[index++] = level_duration_make(
132-
false, (uint32_t)subghz_protocol_marantec24_const.te_short * 3);
133-
}
114+
instance->encoder.upload[index++] = level_duration_make(
115+
false, (uint32_t)subghz_protocol_marantec24_const.te_long * 2);
116+
}
117+
} else {
118+
// Send bit 0
119+
instance->encoder.upload[index++] =
120+
level_duration_make(true, (uint32_t)subghz_protocol_marantec24_const.te_long);
121+
if(i == 1) {
122+
//Send gap if bit was last
123+
instance->encoder.upload[index++] = level_duration_make(
124+
false,
125+
(uint32_t)subghz_protocol_marantec24_const.te_long * 9 +
126+
subghz_protocol_marantec24_const.te_short);
127+
} else {
128+
instance->encoder.upload[index++] = level_duration_make(
129+
false, (uint32_t)subghz_protocol_marantec24_const.te_short * 3);
134130
}
135131
}
136132
}
@@ -167,7 +163,6 @@ SubGhzProtocolStatus
167163

168164
subghz_protocol_marantec24_check_remote_controller(&instance->generic);
169165
subghz_protocol_encoder_marantec24_get_upload(instance);
170-
instance->encoder.front = 0; // reset before start
171166
instance->encoder.is_running = true;
172167
} while(false);
173168

@@ -177,7 +172,6 @@ SubGhzProtocolStatus
177172
void subghz_protocol_encoder_marantec24_stop(void* context) {
178173
SubGhzProtocolEncoderMarantec24* instance = context;
179174
instance->encoder.is_running = false;
180-
instance->encoder.front = 0; // reset position
181175
}
182176

183177
LevelDuration subghz_protocol_encoder_marantec24_yield(void* context) {
@@ -239,7 +233,7 @@ void subghz_protocol_decoder_marantec24_feed(void* context, bool level, volatile
239233
switch(instance->decoder.parser_step) {
240234
case Marantec24DecoderStepReset:
241235
if((!level) && (DURATION_DIFF(duration, subghz_protocol_marantec24_const.te_long * 9) <
242-
subghz_protocol_marantec24_const.te_delta * 6)) {
236+
subghz_protocol_marantec24_const.te_delta * 4)) {
243237
//Found GAP
244238
instance->decoder.decode_data = 0;
245239
instance->decoder.decode_count_bit = 0;
@@ -275,7 +269,7 @@ void subghz_protocol_decoder_marantec24_feed(void* context, bool level, volatile
275269
} else if(
276270
// End of the key
277271
DURATION_DIFF(duration, subghz_protocol_marantec24_const.te_long * 9) <
278-
subghz_protocol_marantec24_const.te_delta * 6) {
272+
subghz_protocol_marantec24_const.te_delta * 4) {
279273
//Found next GAP and add bit 0 or 1 (only bit 0 was found on the remotes)
280274
if((DURATION_DIFF(
281275
instance->decoder.te_last, subghz_protocol_marantec24_const.te_long) <

0 commit comments

Comments
 (0)