Skip to content
Snippets Groups Projects
Commit f0c9a621 authored by Strasser, Andreas's avatar Strasser, Andreas
Browse files

implemented psm en-disable

parent c7e095a3
No related branches found
No related tags found
No related merge requests found
...@@ -12,7 +12,6 @@ class NBIoTRequestType ...@@ -12,7 +12,6 @@ class NBIoTRequestType
static var COAP = 4 static var COAP = 4
static var NTP = 5 static var NTP = 5
static var PSM_ENABLE = 6 static var PSM_ENABLE = 6
static var PSM_DISABLE = 7
end end
class NBIoTRequest class NBIoTRequest
...@@ -206,7 +205,7 @@ class NBIoTDebugProcedure : NBIoTProcedure ...@@ -206,7 +205,7 @@ class NBIoTDebugProcedure : NBIoTProcedure
var cmd_debug var cmd_debug
def init(ser, request) def init(ser, request)
super(self).init(ser) super(self).init(ser, request)
self.debug = true self.debug = true
self.cmd_debug = NBIoTCommand(request.cmd + '\r\n', request.rsp, request.retries) self.cmd_debug = NBIoTCommand(request.cmd + '\r\n', request.rsp, request.retries)
...@@ -244,13 +243,41 @@ class NBIoTResetProcedure : NBIoTProcedure ...@@ -244,13 +243,41 @@ class NBIoTResetProcedure : NBIoTProcedure
end end
end end
class NBIoTEnablePSMProcedure : NBIoTProcedure
var cmd_register
var cmd_enable_psm
var cmd_enable_sleep
def init(ser, request)
super(self).init(ser, request)
self.cmd_register = NBIoTCommand('AT+CEREG=5\r\n', 'OK', 10)
self.cmd_enable_psm = NBIoTCommand('AT+CPSMS=1,,,\"01000111\",\"00000001\"\r\n', 'OK', 10)
self.cmd_enable_sleep = NBIoTCommand('AT+QSCLK=1\r\n', 'OK', 10)
end
def execute()
if self.cmd_in_process == nil
self.cmd_in_process = self.cmd_register
elif self.cmd_in_process == self.cmd_register && self.read_rsp_contains_expected_rsp_or_send()
self.cmd_in_process = self.cmd_enable_psm
elif self.cmd_in_process == self.cmd_enable_psm && self.read_rsp_contains_expected_rsp_or_send()
self.cmd_in_process = self.cmd_enable_sleep
elif self.cmd_in_process == self.cmd_enable_sleep
self.done = self.read_rsp_contains_expected_rsp_or_send()
end
self.aborted = self.retries_exceeded()
end
end
class NBIoTDisablePSMProcedure : NBIoTProcedure class NBIoTDisablePSMProcedure : NBIoTProcedure
var cmd_register var cmd_register
var cmd_disable_psm var cmd_disable_psm
var cmd_disable_sleep var cmd_disable_sleep
def init(ser) def init(ser, request)
super(self).init(ser) super(self).init(ser, request)
self.cmd_register = NBIoTCommand('AT+CEREG=1\r\n', 'OK') self.cmd_register = NBIoTCommand('AT+CEREG=1\r\n', 'OK')
self.cmd_disable_psm = NBIoTCommand('AT+CPSMS=0\r\n', 'OK') self.cmd_disable_psm = NBIoTCommand('AT+CPSMS=0\r\n', 'OK')
...@@ -390,7 +417,7 @@ end ...@@ -390,7 +417,7 @@ end
class NBIoTDriverState class NBIoTDriverState
static var INIT = 0 static var INIT = 0
static var IDLE = 1 static var PSM = 1
static var RESET = 2 static var RESET = 2
static var DISABLE_PSM = 3 static var DISABLE_PSM = 3
static var READY = 4 static var READY = 4
...@@ -420,7 +447,23 @@ class NBIoTDriver ...@@ -420,7 +447,23 @@ class NBIoTDriver
end end
def queue_request(request) def queue_request(request)
if self.state != NBIoTDriverState.PSM
self.request_queue.push(request) self.request_queue.push(request)
return true
end
return false
end
def disable_psm()
if self.state == NBIoTDriverState.PSM && !self.psm_disabled
self.psm_disabled = true
return true
end
return false
end end
def start_procedure(procedure) def start_procedure(procedure)
...@@ -454,8 +497,10 @@ class NBIoTDriver ...@@ -454,8 +497,10 @@ class NBIoTDriver
end end
def every_second() def every_second()
if self.state == NBIoTDriverState.IDLE if self.state == NBIoTDriverState.PSM
return if self.psm_disabled
self.next_state(NBIoTDriverState.INIT)
end
elif self.state == NBIoTDriverState.INIT elif self.state == NBIoTDriverState.INIT
self.set_psm_pin(1) self.set_psm_pin(1)
self.next_state(NBIoTDriverState.RESET) self.next_state(NBIoTDriverState.RESET)
...@@ -504,7 +549,9 @@ class NBIoTDriver ...@@ -504,7 +549,9 @@ class NBIoTDriver
procedure = NBIoTMQTTDisconnectProcedure(self.ser, request) procedure = NBIoTMQTTDisconnectProcedure(self.ser, request)
elif request.request_type == NBIoTRequestType.NTP elif request.request_type == NBIoTRequestType.NTP
procedure = NBIoTNTPProcedure(self.ser, request) procedure = NBIoTNTPProcedure(self.ser, request)
elif elif request.request_type == NBIoTRequestType.PSM_ENABLE
procedure = NBIoTEnablePSMProcedure(self.ser, request)
else
tasmota.log(string.format('NBT: Request with type %i not supported, discarding request', request.request_type), 2) tasmota.log(string.format('NBT: Request with type %i not supported, discarding request', request.request_type), 2)
end end
...@@ -521,8 +568,18 @@ class NBIoTDriver ...@@ -521,8 +568,18 @@ class NBIoTDriver
tasmota.log(string.format('NBT: Exceeded retries at command %s, discarding request', cmd), 2) tasmota.log(string.format('NBT: Exceeded retries at command %s, discarding request', cmd), 2)
end end
if self.procedure.request.request_type == NBIoTRequestType.PSM_ENABLE && self.procedure.is_done()
self.psm_disabled = false
end
self.finish_procedure(self.procedure.is_aborted()) self.finish_procedure(self.procedure.is_aborted())
if self.psm_disabled
self.next_state(NBIoTDriverState.READY) self.next_state(NBIoTDriverState.READY)
else
self.set_psm_pin(0)
self.next_state(NBIoTDriverState.PSM)
end
else else
self.procedure.execute() self.procedure.execute()
end end
...@@ -552,37 +609,35 @@ nbiot.init = def (m) ...@@ -552,37 +609,35 @@ nbiot.init = def (m)
def enable_power_save_mode(callback) def enable_power_save_mode(callback)
var request = NBIoTRequest(NBIoTRequestType.PSM_ENABLE, callback) var request = NBIoTRequest(NBIoTRequestType.PSM_ENABLE, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
end end
def disable_power_save_mode(callback) def disable_power_save_mode()
var request = NBIoTRequest(NBIoTRequestType.PSM_DISABLE, callback) return self._driver.disable_psm()
self._driver.queue_request(request)
end end
def get_timestamp(callback) def get_timestamp(callback)
var request = NBIoTRequest(NBIoTRequestType.NTP, callback) var request = NBIoTRequest(NBIoTRequestType.NTP, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
end end
def mqtt_connect(host, port, client, username, password, callback) def mqtt_connect(host, port, client, username, password, callback)
var request = NBIoTMQTTConnectRequest(host, port, client, username, password, callback) var request = NBIoTMQTTConnectRequest(host, port, client, username, password, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
end end
def mqtt_disconnect(callback) def mqtt_disconnect(callback)
var request = NBIoTRequest(NBIoTRequestType.MQTT_DISC, callback) var request = NBIoTRequest(NBIoTRequestType.MQTT_DISC, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
end end
def mqtt_publish(topic, payload, callback) def mqtt_publish(topic, payload, callback)
var request = NBIoTMQTTPublishRequest(topic, payload, callback) var request = NBIoTMQTTPublishRequest(topic, payload, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
end end
def coap_get(host, port, path, query, callback) def coap_get(host, port, path, query, callback)
...@@ -591,9 +646,7 @@ nbiot.init = def (m) ...@@ -591,9 +646,7 @@ nbiot.init = def (m)
else else
var request = NBIoTCOAPRequest(host, port, path, 'GET', query, nil, callback) var request = NBIoTCOAPRequest(host, port, path, 'GET', query, nil, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
return true
end end
end end
...@@ -603,9 +656,7 @@ nbiot.init = def (m) ...@@ -603,9 +656,7 @@ nbiot.init = def (m)
else else
var request = NBIoTCOAPRequest(host, port, path, 'POST', [], payload, callback) var request = NBIoTCOAPRequest(host, port, path, 'POST', [], payload, callback)
self._driver.queue_request(request) return self._driver.queue_request(request)
return true
end end
end end
...@@ -616,7 +667,7 @@ nbiot.init = def (m) ...@@ -616,7 +667,7 @@ nbiot.init = def (m)
var request = NBIoTDebugRequest(cmd, rsp, retries) var request = NBIoTDebugRequest(cmd, rsp, retries)
self._driver.queue_request(request) return self._driver.queue_request(request)
end end
end end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment