Skip to content

Commit

Permalink
version 1.8
Browse files Browse the repository at this point in the history
  • Loading branch information
vad7 committed Apr 2, 2023
1 parent 961ab3f commit 7c5cc8c
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 27 deletions.
2 changes: 1 addition & 1 deletion Distr/nrf24batch/CO2_mini.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ DPL: 0
RETR: 0x0F
Resend: 3
Delay_ms: 30
Listen repeat: 3
ReadCmd repeat: 3

Payload struct: 2,1,1
EEPROM=0; RAM=1; PROGMEM=2; ID=3; RESET=4; WRAM=0x89
Expand Down
26 changes: 17 additions & 9 deletions Distr/nrf24batch/Kitchen Vent.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ R: ID*=,ID
R: CO2 level*2[3]=i:4,,R2
W: CO2 level*2=,i:4,W2

R: Fan speeds=25
W: Fan speeds=,25
R: FanSpeed[3]=i:19
W: FanSpeed=,i:19
R: FanCook speeds=26
W: FanCook speeds=,26
R: FanCookSpeed[3]=i:22
W: FanCookSpeed=,i:22

Expand Down Expand Up @@ -52,8 +56,8 @@ W: SpeedKeyIdx=,17
R: IRRemotes=32
W: IRRemotes=,32

R: IRRemotesHash*2[80]=i:32#,,R2
W: IRRemotesHash*2=,i:32,W2
R: IRRemotesHash*2[70]=i:33,,R2#
W: IRRemotesHash*2=,i:33,W2

R: OutPeriod=18
W: OutPeriod=,18
Expand All @@ -67,24 +71,27 @@ W: RxAddr=,2
R: Ch=3
W: Ch=,3

R: OSCCAL_EMEM=0
R: _OSCCAL=0x51,RAM
W: _OSCCAL=,0x51,WRAM
R: OSCCAL_EMEM=0

R: _PORTA=0x39,RAM
W: _PORTA=,0x3B,WRAM
R: _PORTB=0x36,RAM
W: _PORTB=,0x38,WRAM

R: _LED Warning=0x6B,RAM
W: _LED Warning=,0x6B,WRAM
R: _OutPeriod=0x8B,RAM
W: _OutPeriod=,0x8B,WRAM

R: _Fanspeed=0x74,RAM
R: _FanOn=0x75,RAM
R: _FanOnNext=0x73,RAM
R: _FanOnNextCnt=0x71,RAM
R: _FanOnLast=0x72,RAM
R: _Fanspeed=0x74,RAM
R: _IRHashLast*2=0x79,RAM,R2
R: _IRHashLast*2=0x79,RAM,R2#

R: _LED Warning=0x6B,RAM
W: _LED Warning=,0x6B,WRAM

W: Reset=,RESET,0xC1

Expand All @@ -109,11 +116,12 @@ RBatch: Work: ID;CO2 level;FanCookSpeed;FanCookOnTime;FanCookOffTime;FanCookSlee
RBatch: Hardware: ID;RxAddr;Ch;SpeedInitIdx;Flags;OutPeriod;IRRemotes;OSCCAL_EMEM
RBatch: All: ID;CO2 level;FanCookSpeed;FanCookOnTime;FanCookOffTime;FanCookSleep;FanSpeed;FanOnTime;FanOffTime;FanSleep;RxAddr;Ch;SpeedInitIdx;Flags;OutPeriod;IRRemotes;IRRemotesHash

WBatch: Init(Cook2spd,Lamp-F2.2): RxAddr=0xC1;Ch=122;CO2 level={700,850,1000};FanSpeed={3,5,6};FanCookSpeed={3,6,12};FanSleep=20;FanCookSleep=6;FanOnTime=150;FanCookOnTime=2;FanOffTime=100;FanCookOffTime=0;SpeedInitIdx=0;SpeedKeyIdx=6;Flags=0x49;OutPeriod=6;IRRemotes=0
WBatch: Init(Cook2spd,Lamp-F2.2): RxAddr=0xC1;Ch=122;CO2 level={950,1050,1200};Fan speeds=1;FanSpeed={2,2,2};FanCook speeds=2;FanCookSpeed={2,4,4};FanSleep=20;FanCookSleep=6;FanOnTime=150;FanCookOnTime=0;FanOffTime=100;FanCookOffTime=0;SpeedInitIdx=0;SpeedKeyIdx=6;Flags=0x0D;OutPeriod=2;IRRemotes=0
WBatch: IRRemotes: IRRemotes=0
WBatch: LED Warning: _LED Warning=0x10
WBatch: PORTA: _PORTA=0x0C
WBatch: PORTB: _PORTB=0xC
WBatch: OutPeriod: _OutPeriod=2
WBatch: OSCCAL: _OSCCAL=128
WBatch: CO2 Level+Fan speed: CO2 level={700,850,1000};FanSpeed={3,5,6}
WBatch: CO2 Level: CO2 level={750,850,1000}
WBatch: Reset: Reset
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ Flipper Zero application for nRF24L01 external board. Sends batch commands.
- Пакетная отправка (Set),
- Режим прослушивания адреса (Listen).
<br>
Есть два вида команд: запрос-ответ и запись.<br>
Запрос-ответ (Read) - отправка пакета, переключение на прием и отображение на экране, что получили.<br>
Запись (Write) - фактически отправка пакетов подряд с нужными данными.<br>
Пакетная отправка (Set) - режим пульта, отправка пакетов сразу из списка без вопросов и без преварительного пакета "Write start".<br>
Режим прослушивания (Listen) - если в файле присутствует строка "Listen: <адрес>=<поле 1>,<поле 2>,...", где "поле.." название поля. Адрес пожно менять - долго нажать Ok.<br>
Чтение по одной команде - отправка пакета, переключение на прием и отображение на экране, что получили. Длительное нажатие кнопки Ok включает режим автоматического повторного запроса через заданный интервал в секундах (настройка "ReadCmd repeat:").<br><br>
Пакетное чтение - выполнение подряд нескольких команд чтения.<br><br>
Пакетная запись - фактически отправка пакетов подряд с нужными данными. Предварительно отправляется пакет "Write start", если эта строка присутствует в файле настроек.<br><br>
Пакетная отправка - режим пульта, отправка пакетов сразу из списка без вопросов и без преварительного пакета "Write start".<br><br>
Режим прослушивания - если в файле присутствует строка "Listen: <адрес>=<поле 1>,<поле 2>,...", где "поле.." название поля. Адрес можно менять - долго нажать кнопку Ok.<br><br>
<br>
Формат пакета для отправки (payload) задается в виде размера полей структуры в байтах, например, так "Payload struct: 2,1,1", что означает структуру из 3 полей: 2 байта, 1 байт, 1 байт.<br>
Полученный в ответ пакет (такой же длины как и отправленный) состоит из одного значения (остаток пакета не используется), размерность по умолчанию 1 байт (int8), при необходимости, она задается числом после '*' после имени команды.<br><br>
Expand Down
5 changes: 5 additions & 0 deletions descript.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ DPL: 0 <- nRF24 dynamic payload en/dis
RETR: 0x0F <- nRF24 SETUP_RETR register (address 04)
Resend: 3 <- resend attempts on error
Delay_ms: 30 <- delay between cmd and resend
ReadCmd repeat: 3 <- seconds (long press "Ok" in ReadCmd mode turn on repeating)

Payload struct: 2,1,1 <- field sizes of send packet in bytes, received packet consists of 1 field with default size 1 byte (int8)
EEPROM=0; RAM=1; PROGMEM=2; ID=3; RESET=4 <- Constants
Expand Down Expand Up @@ -34,3 +35,7 @@ RBatch: Settings: ID;OSCCAL;RxAddr;Ch;nRF RETR;CO2 threshold;CO2 correct;FanLSB

WBatch: Default: RxAddr=0xCF;CO2 threshold=1000;Reset <- Write Batch, Send: { 0,0,0,0x8F }, { 0xCF, 0, 1, 0x81 }, { 0xE8, 0x03, 5, 0x82 }, { 0, 0, 4, 0xC1 }
WBatch: Fans: FanLSB={0xC2,0xC3,0} <- Write Batch, Send: { 0,0,0,0x8F }, { 0xC2, 0, 9, 0x81 }, { 0xC3, 0, 10, 0x81 }

S: Lamp=,0,0x40 <- Set cmd
SBatch: Lamp On: Lamp=1 <- Set batch
SBatch: Lamp Off: Lamp=0 <- Set batch
35 changes: 23 additions & 12 deletions nrf24batch.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#include <u8g2.h>

#define TAG "nrf24batch"
#define VERSION "1.7"
#define VERSION "1.8"

#define SCAN_APP_PATH_FOLDER "/ext/nrf24batch"
#define LOG_FILEEXT ".txt"
Expand Down Expand Up @@ -44,7 +44,7 @@ const char SettingsFld_ReadBatch[] = "RBatch:";
const char SettingsFld_WriteBatch[] = "WBatch:";
const char SettingsFld_SetBatch[] = "SBatch:";
const char SettingsFld_Listen[] = "Listen:";
const char SettingsFld_ListenRepeatPeriod[] = "Listen repeat:";
const char SettingsFld_ReadCmdRepeatPeriod[] = "ReadCmd repeat:";
const char AskQuestion_Save[] = "SAVE BATCH?";
#define Settings_i 'i'
#define Settings_n 'n'
Expand Down Expand Up @@ -95,7 +95,7 @@ uint8_t NRF_last_packet_send_st = 0;
uint8_t NRF_resend = 1; // number of transaction attempts
int8_t NRF_repeat = 0; // count number of repeated requests (until < NRF_resend)
uint32_t NRF_time;
uint16_t ListenRepeatPeriod = 10; // s
uint16_t ReadCmdRepeatPeriod = 10; // s
bool ReadRepeat = false;
uint32_t delay_between_pkt = 10;// ms

Expand Down Expand Up @@ -550,7 +550,13 @@ bool fill_payload(char *p, uint8_t *idx_i, int32_t var_n)
} else if(*p == 'n' && *(p + 1) < '0') { // var_n
if(var_n != VAR_EMPTY) b = var_n;
} else if(*p >= 'A') { // constant found
b = subs_constant(p, end ? (uint8_t)(end - p) : strlen(p));
uint8_t len;
if(end) len = end - p;
else {
len = strlen(p);
if(*(p + len - 1) == '#') len--;
}
b = subs_constant(p, len);
if(b == VAR_EMPTY) {
ERR = 1;
memset(ERR_STR, 0, sizeof(ERR_STR));
Expand Down Expand Up @@ -854,8 +860,8 @@ static uint8_t load_settings_file() {
NRF_resend = str_to_int(p + sizeof(SettingsFld_Resend));
} else if(strncmp(p, SettingsFld_Delay, sizeof(SettingsFld_Delay)-1) == 0) {
delay_between_pkt = str_to_int(p + sizeof(SettingsFld_Delay));
} else if(strncmp(p, SettingsFld_ListenRepeatPeriod, sizeof(SettingsFld_ListenRepeatPeriod)-1) == 0) {
ListenRepeatPeriod = str_to_int(p + sizeof(SettingsFld_ListenRepeatPeriod));
} else if(strncmp(p, SettingsFld_ReadCmdRepeatPeriod, sizeof(SettingsFld_ReadCmdRepeatPeriod)-1) == 0) {
ReadCmdRepeatPeriod = str_to_int(p + sizeof(SettingsFld_ReadCmdRepeatPeriod));
} else if(strncmp(p, SettingsFld_Payload, sizeof(SettingsFld_Payload)-1) == 0) {
p += sizeof(SettingsFld_Payload);
payload_fields = 0;
Expand Down Expand Up @@ -1073,7 +1079,7 @@ void display_add_status(void)
static void render_callback(Canvas* const canvas, void* ctx) {
if(ctx == NULL) return;
const PluginState* plugin_state = ctx;
if(furi_mutex_acquire(plugin_state->mutex, 25) != FuriStatusOk) return;
if(furi_mutex_acquire(plugin_state->mutex, 5) != FuriStatusOk) return;

//canvas_draw_frame(canvas, 0, 0, 128, 64); // border around the edge of the screen
if(what_doing == 0) {
Expand Down Expand Up @@ -1348,6 +1354,7 @@ void next_rw_type(int8_t add)

void next_view_cmd(int8_t add)
{
if(rw_type == rwt_listen) return;
uint16_t max = (rw_type == rwt_read_batch ? ReadBatch_cmd_Total :
rw_type == rwt_read_cmd ? Read_cmd_Total :
rw_type == rwt_set_batch ? SetBatch_cmd_Total : WriteBatch_cmd_Total);
Expand Down Expand Up @@ -1393,7 +1400,7 @@ int32_t nrf24batch_app(void* p) {
FuriLogLevel = furi_log_get_level();
if(FuriLogLevel == FuriLogLevelDebug) furi_hal_uart_set_br(FuriHalUartIdUSART1, 1843200);
}
if(what_doing == 2 && rw_type == rwt_read_cmd && ReadRepeat && furi_get_tick() - NRF_time > (uint32_t)(ListenRepeatPeriod * 1000)) {
if(what_doing == 2 && rw_type == rwt_read_cmd && ReadRepeat && furi_get_tick() - NRF_time > (uint32_t)(ReadCmdRepeatPeriod * 1000)) {
ERR = 0;
free_Log();
Run_Read_cmd(Read_cmd[view_cmd[rwt_read_cmd]]);
Expand Down Expand Up @@ -1468,8 +1475,10 @@ int32_t nrf24batch_app(void* p) {
else if(*(Edit_pos - 1) == ',') Edit_pos -= 2;
}
} else if(what_doing == 0) {
rw_type = rwt_listen;
what_doing = 1;
if(addr_len) {
rw_type = rwt_listen;
what_doing = 1;
}
} else if(what_doing == 1) {
if(event.input.type == InputTypeShort) next_rw_type(-1); else if(view_x) view_x--;
} else if(what_doing == 2) if(view_x) view_x--;
Expand All @@ -1492,8 +1501,10 @@ int32_t nrf24batch_app(void* p) {
if(*(Edit_pos + 1) == 'x') Edit_pos += 2;
}
} else if(what_doing == 0) {
rw_type = rwt_set_batch;
what_doing = 1;
if(addr_len) {
rw_type = rwt_set_batch;
what_doing = 1;
}
} else if(what_doing == 1) {
if(event.input.type == InputTypeShort) next_rw_type(+1); else view_x++;
} else if(what_doing == 2) view_x++;
Expand Down

0 comments on commit 7c5cc8c

Please sign in to comment.