diff --git a/src/driver/nbiot.be b/src/driver/nbiot.be index a831a83ef9e79ba3c8976bbcba80e53f0bcf31f8..1b7e70fc9c1cc4f9affa1917937f6615c0b4179d 100644 --- a/src/driver/nbiot.be +++ b/src/driver/nbiot.be @@ -108,6 +108,7 @@ end class NBIoTProcedure var ser var request + var response var debug var done var aborted @@ -117,6 +118,7 @@ class NBIoTProcedure def init(ser, request) self.ser = ser self.request = request + self.response = nil self.debug = false self.done = false self.aborted = false @@ -351,7 +353,7 @@ class NBIoTNTPProcedure : NBIoTProcedure self.cmd_ntp = NBIoTCommand('AT+QNTP=1,\"0.at.pool.ntp.org\"\r\n', '+QNTP: 0', 10) end - def set_system_time(rsp) + def extract_timestamp(rsp) var rsp_args = string.split(rsp, '\"') var timestamp = nil @@ -363,7 +365,7 @@ class NBIoTNTPProcedure : NBIoTProcedure end end - tasmota.cmd('time ' + str(timestamp['epoch'] + 3600)) # UTC + 1 + return timestamp['epoch'] + 3600 # UTC + 1 end def execute() @@ -374,7 +376,7 @@ class NBIoTNTPProcedure : NBIoTProcedure var rsp = self.fetch_read_rsp_if_contains_expected_rsp_or_send('+QNTP: 0', 'AT+QNTP=1,\"0.at.pool.ntp.org\"\r\n') if rsp != nil - self.set_system_time(rsp) + self.response = self.extract_timestamp(rsp) self.done = true end @@ -421,13 +423,19 @@ class NBIoTDriver self.request_queue.push(request) end - def init_procedure(procedure) + def start_procedure(procedure) self.procedure = procedure end - def finish_procedure(done) + def finish_procedure(aborted) if self.procedure.request != nil && self.procedure.request.callback != nil - self.procedure.request.callback(done, nil) + var error_code = 0 + + if aborted + error_code = -1 + end + + self.procedure.request.callback(error_code, self.procedure.response) end self.procedure = nil @@ -453,13 +461,13 @@ class NBIoTDriver self.next_state(NBIoTDriverState.RESET) elif self.state == NBIoTDriverState.RESET if self.procedure == nil - self.init_procedure(NBIoTResetProcedure(self.ser)) + self.start_procedure(NBIoTResetProcedure(self.ser)) end self.procedure.execute() if self.procedure.is_done() - self.finish_procedure() + self.finish_procedure(false) if self.psm_disabled self.next_state(NBIoTDriverState.READY) @@ -469,14 +477,14 @@ class NBIoTDriver end elif self.state == NBIoTDriverState.DISABLE_PSM if self.procedure == nil - self.init_procedure(NBIoTDisablePSMProcedure(self.ser)) + self.start_procedure(NBIoTDisablePSMProcedure(self.ser)) end self.procedure.execute() if self.procedure.is_done() self.psm_disabled = true - self.finish_procedure() + self.finish_procedure(false) self.next_state(NBIoTDriverState.READY) end elif self.state == NBIoTDriverState.READY @@ -501,7 +509,7 @@ class NBIoTDriver end if procedure != nil - self.init_procedure(procedure) + self.start_procedure(procedure) self.next_state(NBIoTDriverState.BUSY) end end @@ -513,7 +521,7 @@ class NBIoTDriver tasmota.log(string.format('NBT: Exceeded retries at command %s, discarding request', cmd), 2) end - self.finish_procedure(self.procedure.is_done()) + self.finish_procedure(self.procedure.is_aborted()) self.next_state(NBIoTDriverState.READY) else self.procedure.execute() @@ -553,8 +561,8 @@ nbiot.init = def (m) self._driver.queue_request(request) end - def sync_time(callback) - var request = NBIoTRequest(callback) + def get_timestamp(callback) + var request = NBIoTRequest(NBIoTRequestType.NTP, callback) self._driver.queue_request(request) end