39 #include <uavcan/node/Heartbeat_1_0.h>
40 #include <uavcan/node/GetInfo_1_0.h>
41 #include <uavcan/node/ExecuteCommand_1_1.h>
42 #include <uavcan/node/port/List_0_1.h>
43 #include <uavcan/_register/Access_1_0.h>
44 #include <uavcan/_register/List_1_0.h>
45 #include <uavcan/file/Read_1_1.h>
46 #include <uavcan/time/Synchronization_1_0.h>
47 #include <uavcan/pnp/NodeIDAllocationData_1_0.h>
49 #include <rmap/_module/Rain_1_0.h>
50 #include <rmap/service/_module/Rain_1_0.h>
52 #ifndef _CANARD_CLASS_H
53 #define _CANARD_CLASS_H
123 uint8_t
buf[CANARD_MTU_MAX];
141 void send(CanardMicrosecond tx_deadline_usec,
142 const CanardTransferMetadata*
const metadata,
143 const size_t payload_size,
144 const void*
const payload);
146 void sendResponse(
const CanardMicrosecond tx_deadline_usec,
147 const CanardTransferMetadata*
const request_metadata,
148 const size_t payload_size,
149 const void*
const payload);
179 bool rxSubscribe(
const CanardTransferKind transfer_kind,
182 const CanardMicrosecond transfer_id_timeout_usec);
205 bool is_online(
bool is_heart_syncronized);
221 CanardMicrosecond previous_tx_timestamp_us);
223 CanardMicrosecond previous_tx_timestamp_us);
226 CanardMicrosecond previous_tx_timestamp_us);
243 void start_request(uint8_t remote_node, uint8_t *param_request_name,
402 void _fillSubscriptions(
const CanardTreeNode*
const tree, uavcan_node_port_SubjectIDList_0_1*
const obj);
403 void _fillServers(
const CanardTreeNode*
const tree, uavcan_node_port_ServiceIDList_0_1*
const obj);
410 static void*
_memAllocate(CanardInstance*
const ins,
const size_t amount);
411 static void _memFree(CanardInstance*
const ins,
void*
const pointer);
Uavcan Canard Configuration file.
#define CAN_FILE_NAME_SIZE_MAX
#define CAN_RX_QUEUE_CAPACITY
#define CAN_REDUNDANCY_FACTOR
bool get_local_data_ready(void)
Proprietà GET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
void set_local_power_mode(Power_Mode powerMode)
Proprietà SET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali La proprietà è im...
void set_local_fw_uploading(bool fwUploading)
Proprietà SET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
Power_Mode get_local_power_mode(void)
Proprietà GET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
void set_local_data_ready(bool dataReady)
Proprietà SET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
void disable_sleep(void)
Permetto l'attivazione sleep, funzioni ed hardware, del modulo.
uint8_t get_local_node_mode(void)
Ritorna la modalità node mode locale standard UAVCAN per la gestione heartbeat.
void set_local_node_mode(uint8_t heartLocalMODE)
Imposta la modalità nodo standard UAVCAN, gestita nelle funzioni heartbeat.
bool get_local_module_error(void)
Proprietà GET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
bool is_requested_system_restart(void)
Verifica una richiesta di riavvio del sistema standard UAVCAN.
void set_local_module_ready(bool moduleReady)
Proprietà SET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
void set_local_module_error(bool moduleError)
Proprietà SET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
uint8_t get_local_value_heartbeat_VSC(void)
Proprietà GET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
void enable_sleep(void)
Inibisce l'attivazione sleep, funzioni ed hardware, del modulo.
heartbeat_VSC _heartLocalVSC
bool get_local_fw_uploading(void)
Proprietà GET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
bool is_module_sleep(void)
Verifica se attiva la funzione dello sleep del modulo Canard e hardware relativo.
bool get_local_module_ready(void)
Proprietà GET per il valore VendorStatusCode di Heartbeat e per gli utilizzi locali.
void request_sleep(void)
Avvia la richiesta di sleep del modulo. Da chiamare prima di attivare il basso consumo generale.
void request_system_restart(void)
Avvia una richiesta standard UAVCAN per il riavvio del sistema.
CanardNodeID get_server_node(void)
Legge il nodo master file server che richiede il caricamento del file.
uint64_t get_offset_rx(void)
Legge l'offset corrente.
bool download_request(void)
Gestione file, verifica richiesta di download da un nodo remoto.
char * get_name(void)
Nome del file in download.
bool event_timeout(void)
Gestione timeout pending file. Controlla il raggiungimento del timeout.
bool is_pending(void)
Verifica se un comando per il relativo modulo è in attesa. Diventerà false o verrà attivato il timeou...
bool is_first_data_block(void)
Verifica se è il primo blocco di un file. Da utilizzare per rewrite file o init E2Prom Space.
void set_offset_rx(uint64_t remote_file_offset)
Imposta l'offset RX per la lettura di un blocco specifico del file in donload remoto.
void start_pending(uint32_t timeout_us)
Avvia un comando per il metodo corrente con timeOut di validità
char _filename[CAN_FILE_NAME_SIZE_MAX]
void download_end(void)
Gestione file, abbandona o termina richiesta di download da un nodo remoto. Il nodo non risponde più ...
bool is_firmware(void)
Controlla se il file è di tipo firmware o altra tipologia.
void reset_pending(void)
Resetta lo stato dei flag pending per il metodo corrente.
bool next_retry(void)
Gestione automatica totale retry del comando file all'interno della classe MAX retry è gestito nel fi...
bool is_download_complete(void)
Gestione file, fine con successo del download file da un nodo remoto. Il nodo non risponde più alle r...
void start_request(uint8_t remote_node, uint8_t *param_request_name, uint8_t param_request_len, bool is_firmware)
Avvia una richiesta remota di download file ed inizializza le risorse nella classe.
void set_online(uint32_t dead_line_us)
Imposta il nodo OnLine, richiamato in heartbeat o altre comunicazioni client.
CanardMicrosecond last_online(void)
Imposta il nodo OnLine, richiamato in heartbeat o altre comunicazioni client.
bool is_online(bool is_heart_syncronized)
Controlla se il modulo master è online.
CanardMicrosecond _previous_syncronized_timestamp_us
bool check_valid_syncronization(uint8_t current_transfer_id, CanardMicrosecond previous_tx_timestamp_us)
Controlla se messaggio valido (coerenza sequenza e validità di time_stamp)
CanardMicrosecond update_timestamp_message(CanardMicrosecond current_rx_timestamp_us, CanardMicrosecond previous_tx_timestamp_us)
Aggiorna i time stamp della classe sul messaggio standard UAVCAN per le successive sincronizzazioni.
CanardMicrosecond _syncronized_timestamp_us
CanardMicrosecond _previous_local_timestamp_us
uint8_t _previous_transfer_id
CanardMicrosecond get_timestamp_syncronized()
Legge il tempo sincronizzato dal master, in Overload, regolato sui microsecondi locali a partire dall...
CanardMicrosecond _previous_msg_monotonic_us
class canardClass::master::file file
class canardClass::master::timestamp timestamp
class canardClass::master::heartbeat heartbeat
uint8_t _uavcan_file_read_data
uint8_t uavcan_node_heartbeat(void)
Gestione transfer ID UAVCAN per la classe relativa.
uint8_t uavcan_pnp_allocation(void)
Gestione transfer ID UAVCAN per la classe relativa.
uint8_t _uavcan_node_heartbeat
uint8_t _uavcan_pnp_allocation
uint8_t uavcan_file_read_data(void)
Gestione transfer ID UAVCAN per la classe relativa.
uint8_t module_rain(void)
Gestione transfer ID UAVCAN per la classe relativa.
uint8_t _uavcan_node_port_list
uint8_t uavcan_node_port_list(void)
Gestione transfer ID UAVCAN per la classe relativa.
CanardPortID publisher_module_rain
CanardPortID service_module_rain
static uint32_t _lastMicros
class canardClass::port_id port_id
canardClass()
Contruttore della classe Canard.
rmap_module_Rain_1_0 module_rain
struct canardClass::CanardRxQueue CanardRxQueue
void rxUnSubscribe(const CanardTransferKind transfer_kind, const CanardPortID port_id)
Rimozione di una sottoscrizione di una funzione Canard.
bool master_file_read_block_pending(uint32_t timeout_us)
Avvia la richiesta di un blocco file contiguo al file_server tramite classe e controllo Master.
void(* _attach_rx_callback_PTR)(canardClass &, const CanardRxTransfer *, void *)
CanardNodeID get_canard_node_id(void)
Legge l'ID Nodo locale per l'istanza Canard privata della classe Canard.
static CanardMicrosecond getMicros()
Get MonotonicTime Interno realTime.
@ calibrate_accelerometer
@ disable_publish_port_list
@ enable_publish_port_list
void send(CanardMicrosecond tx_deadline_usec, const CanardTransferMetadata *const metadata, const size_t payload_size, const void *const payload)
Send messaggio Canard con daeadline del tempo sincronizzato.
class canardClass::publisher_enabled publisher_enabled
bool slave_heartbeat_send_message(void)
Invia il messaggio di HeartBeat ai nodi remoti.
static uint64_t _mastMicros
void set_canard_node_id(CanardNodeID local_id)
Imposta l'ID Nodo locale per l'istanza Canard privata della classe Canard.
void _fillSubscriptions(const CanardTreeNode *const tree, uavcan_node_port_SubjectIDList_0_1 *const obj)
Prepara la lista delle sottoscrizioni Canard (privata)
class canardClass::master master
class canardClass::flag flag
void receiveQueue(void)
Gestione metodo ricezione coda messaggi dal buffer FIFO preparato di BxCAN Il buffer gestito nella IS...
CanardTxQueue _canard_tx_queues[CAN_REDUNDANCY_FACTOR]
static uint64_t _syncMicros
void _fillServers(const CanardTreeNode *const tree, uavcan_node_port_ServiceIDList_0_1 *const obj)
Prepara la lista dei servizi Canard (privata)
void setReceiveMessage_CB(void(*ptrFunction)(canardClass &, const CanardRxTransfer *, void *), void *param)
Setta il CallBack Function per il processo esterno di interprete su messaggio ricevuto e conforme a C...
uint8_t receiveQueueNextElement(uint8_t currElement)
Ritorna il prossimo elemento del buffer.
void transmitQueue(void)
Trasmette la coda con timeStamp sincronizzato. Per inviare con real_time va aggiornata la sincronizza...
_Alignas(O1HEAP_ALIGNMENT) uint8_t _heap_arena[HEAP_ARENA_SIZE]
void receiveQueueEmpty(void)
Azzera il buffer di ricezione dati collegato a BxCAN e ISR Interrupt.
class canardClass::next_transfer_id next_transfer_id
uint8_t receiveQueueElement(void)
Ritorna l'elemento corrente del buffer di BxCAN, pronto ad essere gestito con Canard.
CanardRxSubscription _rxSubscription[MAX_SUBSCRIPTION]
bool slave_servicelist_send_message(void)
Invia il messaggio dei servizi attivi ai nodi remoti.
bool is_canard_node_anonymous(void)
Controlla se il nodo è anonimo (senza ID Impostato)
void sendResponse(const CanardMicrosecond tx_deadline_usec, const CanardTransferMetadata *const request_metadata, const size_t payload_size, const void *const payload)
Send risposta al messaggio Canard con daeadline del tempo sincronizzato.
static void * _memAllocate(CanardInstance *const ins, const size_t amount)
Gestione O1Heap Memory Canard Allocate.
bool slave_pnp_send_request(uint64_t serial_number)
Invia il messaggio di PNP request (richiesta di node_id valido) al nodo server PNP (master)
CanardRxQueue _canard_rx_queue
CanardNodeID get_canard_master_id(void)
Get master node id for local set and flag operation automatic (sleep, power...)
bool send_file_read_block(CanardNodeID server_id, char *fileName, uint64_t remoteOffset)
Avvia la richiesta di un blocco file contiguo al file_server con ID Fisico.
void set_canard_master_id(CanardNodeID remote_id)
Set node master ID (slave respond to RMAP command and flag with master ID)
void disableReceiveMessage_CB(void)
Disabilita il CallBack Function Canard RX Message CanardRxAccept.
static uint32_t getUpTimeSecond(void)
Ritorna i secondi dall'avvio Canard per UpTime in (in formato 64 BIT necessario per UAVCAN) Non perme...
bool transmitQueueDataPresent(void)
Test coda presenza dati in trasmissione di Canard.
O1HeapDiagnostics _memGetDiagnostics(void)
Diagnostica Heap Data per Heartbeat e/o azioni interne.
bool rxSubscribe(const CanardTransferKind transfer_kind, const CanardPortID port_id, const size_t extent, const CanardMicrosecond transfer_id_timeout_usec)
Sottoscrizione di una funzione Canard.
uint8_t rxSubscriptionAvaiable(void)
Ritorna il numero di sottoscrizioni ancora disponibili.
void enableReceiveMessage_CB(void)
Abilita il CallBack Function Canard RX Message CanardRxAccept.
uint8_t _rxSubscriptionIdx
bool receiveQueueDataPresent(void)
Ritorna true se ci sono dati utili da gestire dal buffer di RX per BxCAN.
static void _memFree(CanardInstance *const ins, void *const pointer)
Gestione O1Heap Memory Canard Free.
static uint64_t _currMicros
Power_Mode
Power mode (Canard and general Node)
uint8_t buf[CANARD_MTU_MAX]
struct canardClass::CanardRxQueue::msg msg[CAN_RX_QUEUE_CAPACITY]