Pārlūkot izejas kodu

'$' at the end of the line - decimal number(s)

vad7 2 gadi atpakaļ
vecāks
revīzija
a823ea3b04
3 mainītis faili ar 40 papildinājumiem un 37 dzēšanām
  1. 24 22
      Distr/nrf24batch/Kitchen Vent Dimmer.txt
  2. 1 1
      README.md
  3. 15 14
      nrf24batch.c

+ 24 - 22
Distr/nrf24batch/Kitchen Vent Dimmer.txt

@@ -99,29 +99,31 @@ W: _PORTA=,0x3B,,WRAM
 R: _PORTB=0x36,,RAM
 W: _PORTB=,0x38,WRAM
 
-R: _LED_Warning=0x71,,RAM
-W: _LED_Warning=,0x71,WRAM
-R: _IRHashLast*2=0x89,,RAM2#
-R: _IRCntLast=0x87,,RAM
-R: _IRHash*2=0x8B,,RAM2#
-R: _SleepTimer=0x8E,,RAM
-R: _FanOn=0x7F,,RAM
-R: _FanOnNext=0x7D,,RAM
-R: _FanOnNextCnt=0x7B,,RAM
-R: _FanOnLast=0x7C,,RAM
-
-R: _OutSpeedMax=0x90,,RAM
-W: _OutSpeedMax=,0x90,WRAM
-
-R: _Fanspeed=0x7E,,RAM
+R: _LED_Warning=0x72,,RAM
+W: _LED_Warning=,0x72,WRAM
+R: _IRHashLast*2=0x8A,,RAM2#
+R: _IRCntLast=0x88,,RAM
+R: _IRLastDuration=0x9A,,RAM
+R: _IRLastDurArr[50]=i:0xA6,,RAM$
+R: _IRHash*2=0x8C,,RAM2#
+R: _SleepTimer=0x8F,,RAM
+R: _FanOn=0x80,,RAM
+R: _FanOnNext=0x7E,,RAM
+R: _FanOnNextCnt=0x7C,,RAM
+R: _FanOnLast=0x7D,,RAM
+
+R: _OutSpeedMax=0x91,,RAM
+W: _OutSpeedMax=,0x91,WRAM
+
+R: _Fanspeed=0x7F,,RAM
 R: _SSR_full_period*2=0x64,,RAM2
 
-R: _PulseDelayAfterZero*2=0x9F,,RAM2
-W: _PulseDelayAfterZero*2=,0x9F,WRAM2
-R: _PulseWidth*2=0x92,,RAM2
-W: _PulseWidth*2=,0x92,WRAM2
-R: _PulseWidth2=0xA3,,RAM
-W: _PulseWidth2=,0xA3,WRAM
+R: _PulseDelayAfterZero*2=0xA0,,RAM2
+W: _PulseDelayAfterZero*2=,0xA0,WRAM2
+R: _PulseWidth*2=0x93,,RAM2
+W: _PulseWidth*2=,0x93,WRAM2
+R: _PulseWidth2=0xA4,,RAM
+W: _PulseWidth2=,0xA4,WRAM
 
 W: Reset=0xEEEE,14,SET
 
@@ -159,6 +161,6 @@ WBatch: FanCooker Down/Up key idx: FanCookSpIdxDnKey=5;FanCookSpIdxUpKey=6
 WBatch: LED Warning: _LED Warning=0x10
 WBatch: OSCCAL: _OSCCAL=146
 WBatch: CO2 Level: CO2 level={820,910,1000};PauseSetByCO2,min=10
-WBatch: Zero cross EEPROM: SSR_PulseWidth,us=9990;SSR2_PulseWidth,us=0;SSR_PulseSafeTime,us=100;Reset
+WBatch: Zero cross EEPROM: SSR_PulseWidth,us=9990;SSR2_PulseWidth,us=0;SSR_PulseSafeTime,us=120;Reset
 WBatch: Zero cross RAM: _PulseDelayAfterZero=0001;_PulseWidth=200;_PulseWidth2=200
 WBatch: Reset: Reset

+ 1 - 1
README.md

@@ -25,7 +25,7 @@ Flipper Zero application for nRF24L01 external board. Sends batch commands.
 Поля разделены - ','. Для "W default" есть специальный маркер 'n', говорящий какое поле будет заполняться значением после '=' из команды "WBatch".<br>
 Можно использовать константы по их имени, они задаются в файле в формате "имя=число", число либо десятичное или шестнадцатеричное с префиксом 0x.<br>
 Затем берутся заполненные значения полей из самой команды ("R:" или "W:").<br>
-Если в конце строки с командой чтения символ '#', то считанное значение будет показано в шестнадцатеричном виде.<br><br>
+Если в конце строки с командой чтения символ '#', то считанное значение будет показано в шестнадцатеричном виде, если '$' - то в десятичном.<br><br>
 Пакеты чтения "RBatch:", записи "WBatch:", отправки "SBatch:" состоят из списка имен команд "R:" или "W:"("S:"), соответственно, перечисленных через ";".<br>
 "S:" то же самое, что и "W:", только пакет "Write start" отправлен не будет<br><br>
 Отправка пакета для записи - длительно нажать Ok в списке и подтвердить.<br>

+ 15 - 14
nrf24batch.c

@@ -73,7 +73,7 @@ uint8_t send_status = sst_none;// sst_*
 bool cmd_array = false;
 uint8_t cmd_array_idx;
 uint8_t cmd_array_cnt = 0;
-bool cmd_array_hex;
+uint8_t cmd_array_type;				//  0 - auto, 1 - hex, 2 - decimal
 uint8_t save_settings = 0;
 uint16_t view_cmd[rwt_max - 1] = {0}; // SetBatch, ReadBatch, Read, WriteBatch
 uint8_t view_x = 0;
@@ -499,16 +499,16 @@ bool nrf24_read_newpacket() {
 				char hex[9];
 				hex[0] = '\0';
 				add_to_str_hex_variable(hex, (uint8_t*)&var, size);
-				if((cmd_array && cmd_array_hex) || furi_string_end_with_str(str, "0x")) furi_string_cat_str(str, hex);
+				if((cmd_array && cmd_array_type == 1) || furi_string_end_with_str(str, "0x")) furi_string_cat_str(str, hex);
 				else {
-					if(var >= 0 && var <= 9) furi_string_cat_printf(str, "%ld", var);
+					if((var >= 0 && var <= 9) || cmd_array_type == 2) furi_string_cat_printf(str, "%ld", var);
 					else furi_string_cat_printf(str, "%ld (%s)", var, hex);
 				}
 			}
 			if(cmd_array) {
 				if(--cmd_array_cnt) {
 					furi_string_cat_str(str, ",");
-					if(cmd_array_hex) furi_string_cat_str(str, "0x");
+					if(cmd_array_type == 1) furi_string_cat_str(str, "0x");
 					payload[cmd_array_idx] += size;	// next array element
 					NRF_repeat = -1;
 					send_status = sst_sending;	// Will be send after delay_between_pkt
@@ -571,7 +571,7 @@ bool fill_payload(char *p, uint8_t *idx_i, int32_t var_n)
 			if(end) len =  end - p;
 			else {
 				len = strlen(p);
-				if(*(p + len - 1) == '#') len--;
+				if(*(p + len - 1) == '#' || *(p + len - 1) == '$') len--;
 			}
 			b = subs_constant(p, len);
 			if(b == VAR_EMPTY) {
@@ -584,7 +584,7 @@ bool fill_payload(char *p, uint8_t *idx_i, int32_t var_n)
 			}
 		} else if(end == p) {
 			idx += payload_struct[fld];
-		} else if(*p == '#') { // value in Hexadecimal, end string
+		} else if(*p == '#' || *p == '$') { // value forced in Hex/Dec, end string
 			break;
 		} else {
 			ERR = 2;
@@ -624,8 +624,10 @@ bool Run_Read_cmd(FuriString *cmd)
 	FuriString *fs = furi_string_alloc();
 	furi_string_set_strn(fs, (char*)furi_string_get_cstr(cmd), p - (char*)furi_string_get_cstr(cmd));
 	furi_string_cat_str(fs, ": ");
-	bool hexval;
-	if((hexval = *(p + strlen(p) - 1) == '#')) furi_string_cat_str(fs, "0x"); // value in Hex format
+	uint8_t valtype;
+	char c = *(p + strlen(p) - 1);
+	valtype = c == '#' ? 1 : c == '$' ? 2 : 0;
+	if(valtype == 1) furi_string_cat_str(fs, "0x"); // value in Hex format
 	Log[Log_Total++] = fs;
 	p++;
 	memset(payload, 0, sizeof(payload));
@@ -638,7 +640,7 @@ bool Run_Read_cmd(FuriString *cmd)
 		if(p) {
 			cmd_array_cnt = str_to_int(p + 1);
 			if(cmd_array_cnt > 1) {
-				cmd_array_hex = hexval;
+				cmd_array_type = valtype;
 				cmd_array = true; // array
 			}
 		}
@@ -1176,23 +1178,22 @@ static void render_callback(Canvas* const canvas, void* ctx) {
 			canvas_draw_str(canvas, 0, 10, screen_buf);
 			if(ListenFields) {
 				char *p2, *p = ListenFields;
-				uint8_t hex, len, *pld = payload_receive;
+				uint8_t valtype, len, *pld = payload_receive;
 				for(uint8_t i = 0; i < 5 && *p; i++) {
-					hex = false;
 					p2 = strchr(p, ',');
 					if(p2 == NULL) p2 = p + strlen(p);
-					if(*(p2 - 1) == '#') hex = true;
+					valtype = *(p2 - 1) == '#' ? 1 : *(p2 - 1) == '$' ? 2 : 0;
 					memcpy(screen_buf, p, len = p2 - p);
 					strcpy(screen_buf + len, ": ");
 					if(ListenNew) {
 						len = payload_struct[i];
 						int32_t n = get_payload_receive_field(pld, len);
-						if(hex)	{
+						if(valtype == 1) {
 							strcat(screen_buf, "0x");
 							add_to_str_hex_variable(screen_buf, pld, len);
 						} else {
 							snprintf(screen_buf + strlen(screen_buf), 20, "%ld", n);
-							if(n > 9) {
+							if(n > 9 && valtype == 0) {
 								strcat(screen_buf, " (");
 								add_to_str_hex_variable(screen_buf, pld, len);
 								strcat(screen_buf, ")");