Browse Source

some output changes in tool and terminal

pull/478/head
golfi200 3 years ago
parent
commit
69c6ab14fa
  1. 34
      tools/nano/AhoyUL/_libs2/com_handling.py
  2. 7
      tools/nano/AhoyUL/_libs2/file_handling.py
  3. 7
      tools/nano/AhoyUL/src/hmRadio.h
  4. 48
      tools/nano/AhoyUL/src/main.cpp

34
tools/nano/AhoyUL/_libs2/com_handling.py

@ -12,13 +12,13 @@ import _libs2.file_handling as fh
#some global variables
__version_info__ = ('2022', '11', '13')
__version_info__ = ('2022', '12', '19')
__version_string__ = '%40s' % ('hm inverter handling version: ' + '-'.join(__version_info__))
lck2 = threading.Lock() # used for AT-commands to access serial port
com_stop = True
promt = '/> '
respo = '<< '
sendi = '>> '
PROMT = '/> '
RESPO= '<< '
SENDI = '>> '
def get_version():
@ -48,21 +48,23 @@ class AsyncComRead(threading.Thread):
line = line.replace('\n','').replace('\r','')
if len(line) > 2: # filter out empty lines
if self.addTS:
urc.append('\n%s%s%s' % (timestamp(0), respo, line))
urc.append('\n%s%s%s' % (timestamp(0), RESPO, line))
else:
urc.append('\n%s%s' % (respo, line))
urc.append('\n%s%s' % (RESPO, line))
#todo: return values into callback function
if not self.com.is_open or com_stop: break
if urc:
print('\r', end='', flush=True) # return to line-start
fh.my_print('\n%s' % ( (' '.join(urc)).replace('\n ', '\n') ))
urc_millis = millis_since(0)
urc_ln = False
# urc_millis = millis_since(0)
# urc_ln = False
print('\n%s' % (PROMT,), end = '') # print promt
if (not urc_ln) and (millis_since(urc_millis) >= 3000):
urc_ln = True
print('\n%s' % (promt,), end = '')
# if (not urc_ln) and (millis_since(urc_millis) >= 3000):
# urc_ln = True
# print('\n%s' % (PROMT,), end = '')
time.sleep(0.1)
if self.debug: print('\n +++ Thread: com reader stopped', end='', flush=True)
@ -121,8 +123,8 @@ def simple_terminal(_com, _debug):
next = True
while(next):
time.sleep(1.0)
_cmd_in = input('\n%s'%(promt,))
fh.my_print('\n%s%s' % (promt, _cmd_in, ))
_cmd_in = input('%s'%(PROMT,))
fh.my_print('\n%s%s' % (PROMT, _cmd_in, ), False)
if "start" in _cmd_in:
#end terminal and return true
@ -133,12 +135,12 @@ def simple_terminal(_com, _debug):
elif '_time' in _cmd_in or '_tnow' in _cmd_in:
_uartstr = 't{:d}'.format(int(time.time()))
_com.write( _uartstr.encode('ascii') )
fh.my_print('\n%s%s%s' % (timestamp(0), sendi, _uartstr, ))
fh.my_print('\n%s%s%s' % (timestamp(0), SENDI, _uartstr, ))
continue
_uartstr = _cmd_in.encode('ascii')
_com.write( ('%s%s' % (sendi, _uartstr, )).encode('ascii') )
fh.my_print('\n%s%s%s' % (timestamp(0), sendi, _uartstr, ))
_com.write( ('%s%s' % (SENDI, _uartstr, )).encode('ascii') )
fh.my_print('\n%s%s%s' % (timestamp(0), SENDI, _uartstr, ))
return True

7
tools/nano/AhoyUL/_libs2/file_handling.py

@ -11,7 +11,7 @@ import binascii
#some global variables
__version_info__ = ('2022', '11', '13')
__version_info__ = ('2022', '12', '19')
__version_string__ = 'file handling version: ' + '-'.join(__version_info__)
lck = threading.Lock() # used for log_sum writing
log_sum = 'logstart... '
@ -29,10 +29,11 @@ def get_log_stop():
return log_stop
def my_print(out):
def my_print(out, _local_print=True):
global lck
global log_sum
print(out, end='', flush=True)
if (_local_print):
print(out, end='', flush=True)
with lck:
log_sum += out

7
tools/nano/AhoyUL/src/hmRadio.h

@ -328,6 +328,7 @@ class HmRadio {
DHEX(buf[i]);
if (i % 10 == 0) DBGPRINT(" ");
} // end for()
DBGPRINTLN(F(""));
}
/**
@ -338,7 +339,6 @@ class HmRadio {
if (_thisdebug <= DEBUG_LEVEL) {
dumpBuf(info, buf, len);
} // end if(debug)
// DBGPRINTLN("");
}
bool isChipConnected(void) {
@ -350,7 +350,8 @@ class HmRadio {
bool mSerialDebug;
/**
* send the buf content to the tx-channel, the rx-channel is switched to two higher index
* send the buf content to the tx-channel, the rx-channel is switched to two higher index or can be given additionally
* packet_t was extended by rf-channel, here used for tx-channel
*/
uint8_t sendPacket_raw(uint8_t *_radio_id, packet_t *_p, uint8_t _rxch) {
// void sendPacket_raw(uint64_t _radio_id64, packet_t *_p, uint8_t _rxch) {
@ -358,7 +359,7 @@ class HmRadio {
uint8_t _arc = 0;
DPRINT(DBG_INFO, F("TXraw Ch"));
if (_p->rfch) _DPRINT(DBG_INFO, F("0"));
if (_p->rfch < 10) _DPRINT(DBG_INFO, F("0"));
_DPRINT(DBG_INFO, _p->rfch);
_DPRINT(DBG_INFO, F(" "));
_DPRINT(DBG_INFO, _p->plen);

48
tools/nano/AhoyUL/src/main.cpp

@ -49,7 +49,8 @@ static bool processPayload(invPayload_t *, config_t *, bool);
static uint8_t checkPayload(invPayload_t *);
static bool resetPayload(invPayload_t *);
// output and decoding
static bool out_uart_smac_resp(invPayload_t *);
static bool out_uart_smac_resp_OK(invPayload_t *);
static bool out_uart_smac_resp_ERR(invPayload_t *);
static uint8_t collect_and_return_userPayload(invPayload_t *, uint8_t *, uint8_t);
static void decodePayload(uint8_t, uint8_t *, uint8_t, uint32_t, char *, uint8_t, uint16_t);
// interrupt handler
@ -82,7 +83,7 @@ static RadioType hmRadio;
// static uint8_t radio_id[5]; //todo: use the mPayload[].id field ,this defines the radio-id (domain) of the rf24 transmission, will be derived from inverter id
// static uint64_t radio_id64 = 0ULL;
#define DEF_VERSION "\n version 2022-12-15 23:00"
#define DEF_VERSION "\n version 2022-12-19 21:35"
#define P(x) (__FlashStringHelper *)(x) // PROGMEM-Makro for variables
static const char COMPILE_DATE[] PROGMEM = {__DATE__};
static const char COMPILE_TIME[] PROGMEM = {__TIME__};
@ -110,7 +111,7 @@ static volatile uint32_t tcmd_millis = 0L; // timer for smac cmd
#define ONE_SECOND (1000L)
static uint8_t c_loop = 0;
static volatile int sread_len = 0; // UART read length
static volatile int m_sread_len = 0; // UART read length
// static volatile bool rxRdy = false; //will be set true on first receive packet during sending interval, reset to false before sending
static uint8_t m_inv_ix = 0;
static bool payload_used[MAX_NUM_INVERTERS];
@ -126,7 +127,7 @@ static uint8_t tmp81 = 0;
// static uint32_t min_SEND_SYNC_msec = MIN_SEND_INTERVAL_ms;
static uint8_t mCountdown_noSignal = SEND_REPEAT;
static volatile uint32_t mSendInterval_ms = SEND_NOSIGNAL_SHORT * ONE_SECOND;
static volatile uint32_t polling_req_msec = SEND_INTERVAL * ONE_SECOND; // will be set via serial interface
static volatile uint32_t polling_req_msec = SEND_INTERVAL * ONE_SECOND; // will be set via serial interface
static bool iv_devControlReq = false; // this is one kind of requests, see devControlCmds
static uint8_t iv_devControlCmd = ActivePowerContr; // for now the only devControlCmd
@ -269,8 +270,8 @@ void loop() {
Serial.print(F("\nd"));
// simple decoding, can only handle the current active inverter index, maybe erased if new data arrive, switch other inverter via interter indexing in automode settings
decodePayload(TX_REQ_INFO + 0x80, user_payload, 42, user_pl_ts, utSer.mStrOutBuf, MAX_STRING_LEN, mPayload[m_inv_ix].invType);
sread_len = utSer.serBlockRead_ms(utSer.mSerBuffer);
doDecode = (bool)utSer.uart_eval_decimal_val(F("decoding "), utSer.mSerBuffer, sread_len, 0, 255, 1);
m_sread_len = utSer.serBlockRead_ms(utSer.mSerBuffer);
doDecode = (bool)utSer.uart_eval_decimal_val(F("decoding "), utSer.mSerBuffer, m_sread_len, 0, 255, 1);
break;
} // end case d
@ -369,7 +370,7 @@ void loop() {
} // end case i
case (char)'c': {
// todo: scan all channels for 1bit RDP (RSSI) value and print result
// scans all channels for 1bit RDP (RSSI) value and print result e.g c100 scans in a loop of 100 iterations
// Serial.print(F("\nc OK "));
mParams = utSer.getParamsBuf();
tmp8 = utSer.read_uart_cmd_param(mParams);
@ -391,8 +392,8 @@ void loop() {
case (char)'m': {
// enable/disable show MACmessages via "m0" or "m1"
Serial.print(F("\nm"));
sread_len = utSer.serBlockRead_ms(utSer.mSerBuffer);
showMAC = (bool)utSer.uart_eval_decimal_val(F("showMAC "), utSer.mSerBuffer, sread_len, 0, 255, 1);
m_sread_len = utSer.serBlockRead_ms(utSer.mSerBuffer);
showMAC = (bool)utSer.uart_eval_decimal_val(F("showMAC "), utSer.mSerBuffer, m_sread_len, 0, 255, 1);
break;
} // end case m
@ -446,8 +447,8 @@ void loop() {
// set the time sec since Jan-01 1970 (UNIX epoch time) as decimal String value e.g. "t1612345678:" for Feb-03 2021 9:47:58
// timestamp is only used for sending packet timer, but not for the timing of Tx/Rx scheduling etc...
// ther is no need of exact timing, it must only increase (change) in REQ_INFO_CMDs
sread_len = utSer.serBlockRead_ms(utSer.getInBuf());
mTimestamp = utSer.uart_eval_decimal_val(F("time set "), utSer.getInBuf(), sread_len, 10 * 3600, 0xFFFFFFFF, 1);
m_sread_len = utSer.serBlockRead_ms(utSer.getInBuf());
mTimestamp = utSer.uart_eval_decimal_val(F("time set "), utSer.getInBuf(), m_sread_len, 10 * 3600, 0xFFFFFFFF, 1);
break;
} // end case t
@ -490,6 +491,7 @@ void loop() {
// todo: add queue of cmds or schedule simple device control request for power limit values
if (sendNow || (millis() - timer2_millis > mSendInterval_ms)) {
timer2_millis = millis();
smac_send |= showMAC;
// DISABLE_IRQ;
payload_used[m_inv_ix] = !resetPayload(&mPayload[m_inv_ix]);
mPayload[m_inv_ix].isMACPacket = true;
@ -554,8 +556,9 @@ void loop() {
if (processPayload(&mPayload[m_inv_ix], &mConfig, true)) {
// data valid and complete
if (mPayload[m_inv_ix].isMACPacket && showMAC) {
out_uart_smac_resp(&mPayload[m_inv_ix]);
if (mPayload[m_inv_ix].isMACPacket && smac_send) {
smac_send = false;
out_uart_smac_resp_OK(&mPayload[m_inv_ix]);
}
payload_used[m_inv_ix] = true;
tmp8 = collect_and_return_userPayload(&mPayload[m_inv_ix], &user_payload[0], USER_PAYLOAD_MAXLEN);
@ -572,9 +575,8 @@ void loop() {
if (smac_send && (millis() - tcmd_millis > 4000)) {
smac_send = false;
// shows number of retransmits, if rt>0 some response, but incomplete
Serial.print(F("rmac:rt"));
Serial.print(mPayload[m_inv_ix].retransmits);
Serial.println(F(":ERR"));
out_uart_smac_resp_ERR(&mPayload[m_inv_ix]);
} // end if()
}
@ -689,7 +691,7 @@ static uint8_t getNumInv(invPayload_t *_payload, uint8_t _pMAX) {
//
/**
* clearing of the current inverter data structure, except the ID and typedef
* clearing of the current inverter data structure, except the inv_id and inv_type
*/
static bool resetPayload(invPayload_t *_payload) {
// static uint8_t m_inv_ix;
@ -918,7 +920,7 @@ static uint8_t checkPayload(invPayload_t *_payload) {
/**
* output of sorted packets with MAC-header, all info included
*/
static bool out_uart_smac_resp(invPayload_t *_payload) {
static bool out_uart_smac_resp_OK(invPayload_t *_payload) {
Serial.print(F("\nrMAC:ch"));
if (_payload->rxChIdx < 10) Serial.print(F("0"));
Serial.print(_payload->rxChIdx);
@ -936,6 +938,16 @@ static bool out_uart_smac_resp(invPayload_t *_payload) {
return true;
}
static bool out_uart_smac_resp_ERR(invPayload_t *_payload) {
Serial.print(F("\nrMAC:ch"));
if (_payload->rxChIdx < 10) Serial.print(F("0"));
Serial.print(_payload->rxChIdx);
Serial.print(F(":{}:rt"));
Serial.print(_payload->retransmits);
Serial.println(F(":ERR"));
return true;
}
/**
* output of pure user payload message
*/

Loading…
Cancel
Save