acoused/Model/peacock_uvp/apf04_addr_cmd.py

125 lines
4.2 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @copyright this code is the property of Ubertone.
# You may use this code for your personal, informational, non-commercial purpose.
# You may not distribute, transmit, display, reproduce, publish, license, create derivative works from, transfer or sell any information, software, products or services based on this code.
# @author Stéphane Fischer
import os
import json
import logging
logging.basicConfig(level=logging.DEBUG)
## Adresses et commandes de l'APF04
# numéro de commande d'inaction (tourne en boucle en attendant une commande)
CMD_NULL = 0
# numéro de commande pour l'arrêt de l'action en cours
CMD_STOP = 1
# numéro de commande mode bloquant
CMD_PROFILE_BLOCKING = 3
# numéro de commande mode non bloquant
CMD_PROFILE_NON_BLOCKING = 4
# numéro de commande mesure avec remontée des IQ
CMD_PROFILE_IQ = 6
# numéro de commande démarrage du mode auto
CMD_START_AUTO = 2
# numéro de commande verification de la configuration courante
CMD_CHECK_CONFIG = 5
# numéro de commande de réinitialisation du settings
CMD_INIT_SETTINGS = 7
# mesure de niveau
CMD_MEAS_LEVEL = 20
# numéro de commande pour un test de LED
CMD_TEST_LED = 190
# numéro de commande pour une mesure de température + pitch + roll
CMD_TEST_I2C = 195
# ces 5 adresses sont considérées comme fixes et qui ne changeront jamais.
ADDR_ACTION = 0xFFFD
ADDR_VERSION_C = 0x0000 # nécessaire pour pouvoir justement déterminer le dict des autres adresses
ADDR_VERSION_VHDL = 0xFFFE
ADDR_MODEL_YEAR = 0x0001
ADDR_SERIAL_NUM = 0x0002
def get_addr_dict(version_c, addr_json=None):
"""
Gets the addresses in RAM given the firmware version.
Args:
version_c: two digits number version
addr_json: possible to give directly a json file
Returns:
Dictionnary with the addresses names as keys and addresses in hexa as values.
"""
version_c = int(version_c)
if addr_json:
with open(addr_json) as json_file:
addr_dict = json.loads(json_file.read())
else:
if version_c <= 52 and version_c >= 47:
addr_json = os.path.abspath(__file__).split('/peacock_uvp/')[0] + "/peacock_uvp/addr_S-Firmware-47.json"
else:
addr_json = os.path.abspath(__file__).split('/peacock_uvp/')[0] + "/peacock_uvp/addr_S-Firmware-"+str(version_c)+".json"
if addr_json.split("/")[-1] in os.listdir(os.path.abspath(__file__).split('/peacock_uvp/')[0] + "/peacock_uvp/"):
with open(addr_json) as json_file:
addr_dict = json.loads(json_file.read())
else:
# TODO mb 20/10/2021 choisir si on veut mettre un comportement par défaut ou fonctionner par exception
logging.debug("WARNING: Unknown Addresses for this S-Firmware version.")
addr_dict = None
logging.debug(os.listdir("."))
logging.debug("addr json: %s"%addr_json)
logging.debug("addr dict: %s"%addr_dict)
print(addr_dict)
# conversion of haxa strings to hexa number
if addr_dict:
for key,value in addr_dict.items():
if isinstance(value, str):
if "x" in value:
addr_dict.update({key:int(value, 16)})
logging.debug("addr dict converted: %s"%addr_dict)
return addr_dict
# ===============================================
# DESCRIPTION OF AVAILABLE ADDRESSES IN THE DICT:
# ===============================================
#ADDR_SOUND_SPEED_AUTO
#ADDR_SOUND_SPEED_SET
#Adresse contenant l'adresse de la configuration de séquencement ultrasons demandée par Modbus. Elle est suivie par les 3 config partagées avec Modbus.
#ADDR_CONFIG_ID
#Adresse de départ de la zone contenant les config
#ADDR_CONFIG
#Décallage entre chaque config
#OFFSET_CONFIG
#SIZE_CONFIG
# ----- Mesures Sensors -----
#Adresse du tanguage moyen mesuré (à destination du Modbus)
#ADDR_TANGAGE
#Adresse du roulis moyen mesuré (à destination du Modbus)
#ADDR_ROULIS
#Adresse de la température moyenne mesurée (à destination du Modbus)
#ADDR_TEMP_MOY
# ---- En-tête des profils ----
#ADDR_SOUND_SPEED
#ADDR_GAIN_CA0
#ADDR_GAIN_CA1
#Adresse des profils de vitesse et amplitude
#ADDR_PROFILE_HEADER # adresse du tangage, 1er sensor
#SIZE_PROFILE_HEADER
#ADDR_PROFILE_DATA # le début des données