Line data Source code
1 0 : /* 2 : * Copyright (C) 2021 metraTec GmbH 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_MODEM_SIMCOM_SIM7080_H 8 : #define ZEPHYR_INCLUDE_DRIVERS_MODEM_SIMCOM_SIM7080_H 9 : 10 : #include <zephyr/types.h> 11 : 12 : #include <stdint.h> 13 : 14 : #ifdef __cplusplus 15 : extern "C" { 16 : #endif 17 : 18 0 : #define SIM7080_GNSS_DATA_UTC_LEN 20 19 0 : #define SIM7080_SMS_MAX_LEN 160 20 : 21 0 : struct sim7080_gnss_data { 22 : /** 23 : * Whether gnss is powered or not. 24 : */ 25 1 : bool run_status; 26 : /** 27 : * Whether fix is acquired or not. 28 : */ 29 1 : bool fix_status; 30 : /** 31 : * UTC in format yyyyMMddhhmmss.sss 32 : */ 33 1 : char utc[SIM7080_GNSS_DATA_UTC_LEN]; 34 : /** 35 : * Latitude in 10^-7 degree. 36 : */ 37 1 : int32_t lat; 38 : /** 39 : * Longitude in 10^-7 degree. 40 : */ 41 1 : int32_t lon; 42 : /** 43 : * Altitude in mm. 44 : */ 45 1 : int32_t alt; 46 : /** 47 : * Horizontal dilution of precision in 10^-2. 48 : */ 49 1 : uint16_t hdop; 50 : /** 51 : * Course over ground un 10^-2 degree. 52 : */ 53 1 : uint16_t cog; 54 : /** 55 : * Speed in 10^-1 km/h. 56 : */ 57 1 : uint16_t kmh; 58 : }; 59 : 60 : /** 61 : * Possible sms states in memory. 62 : */ 63 0 : enum sim7080_sms_stat { 64 : SIM7080_SMS_STAT_REC_UNREAD = 0, 65 : SIM7080_SMS_STAT_REC_READ, 66 : SIM7080_SMS_STAT_STO_UNSENT, 67 : SIM7080_SMS_STAT_STO_SENT, 68 : SIM7080_SMS_STAT_ALL, 69 : }; 70 : 71 : /** 72 : * Possible ftp return codes. 73 : */ 74 0 : enum sim7080_ftp_rc { 75 : /* Operation finished correctly. */ 76 : SIM7080_FTP_RC_OK = 0, 77 : /* Session finished. */ 78 : SIM7080_FTP_RC_FINISHED, 79 : /* An error occurred. */ 80 : SIM7080_FTP_RC_ERROR, 81 : }; 82 : 83 : /** 84 : * Buffer structure for sms. 85 : */ 86 1 : struct sim7080_sms { 87 : /* First octet of the sms. */ 88 0 : uint8_t first_octet; 89 : /* Message protocol identifier. */ 90 0 : uint8_t tp_pid; 91 : /* Status of the sms in memory. */ 92 0 : enum sim7080_sms_stat stat; 93 : /* Index of the sms in memory. */ 94 0 : uint16_t index; 95 : /* Time the sms was received. */ 96 : struct { 97 0 : uint8_t year; 98 0 : uint8_t month; 99 0 : uint8_t day; 100 0 : uint8_t hour; 101 0 : uint8_t minute; 102 0 : uint8_t second; 103 0 : uint8_t timezone; 104 0 : } time; 105 : /* Buffered sms. */ 106 0 : char data[SIM7080_SMS_MAX_LEN + 1]; 107 : /* Length of the sms in buffer. */ 108 0 : uint8_t data_len; 109 : }; 110 : 111 : /** 112 : * Buffer structure for sms reads. 113 : */ 114 1 : struct sim7080_sms_buffer { 115 : /* sms structures to read to. */ 116 0 : struct sim7080_sms *sms; 117 : /* Number of sms structures. */ 118 0 : uint8_t nsms; 119 : }; 120 : 121 : /** 122 : * @brief Power on the Sim7080. 123 : * 124 : * @return 0 on success. Otherwise -1 is returned. 125 : */ 126 1 : int mdm_sim7080_power_on(void); 127 : 128 : /** 129 : * @brief Power off the Sim7080. 130 : * 131 : * @return 0 on success. Otherwise -1 is returned. 132 : */ 133 1 : int mdm_sim7080_power_off(void); 134 : 135 : /** 136 : * @brief Starts the modem in network operation mode. 137 : * 138 : * @return 0 on success. Otherwise <0 is returned. 139 : */ 140 1 : int mdm_sim7080_start_network(void); 141 : 142 : /** 143 : * @brief Starts the modem in gnss operation mode. 144 : * 145 : * @return 0 on success. Otherwise <0 is returned. 146 : */ 147 1 : int mdm_sim7080_start_gnss(void); 148 : 149 : /** 150 : * @brief Query gnss position form the modem. 151 : * 152 : * @return 0 on success. If no fix is acquired yet -EAGAIN is returned. 153 : * Otherwise <0 is returned. 154 : */ 155 1 : int mdm_sim7080_query_gnss(struct sim7080_gnss_data *data); 156 : 157 : /** 158 : * Get the sim7080 manufacturer. 159 : */ 160 1 : const char *mdm_sim7080_get_manufacturer(void); 161 : 162 : /** 163 : * Get the sim7080 model information. 164 : */ 165 1 : const char *mdm_sim7080_get_model(void); 166 : 167 : /** 168 : * Get the sim7080 revision. 169 : */ 170 1 : const char *mdm_sim7080_get_revision(void); 171 : 172 : /** 173 : * Get the sim7080 imei number. 174 : */ 175 1 : const char *mdm_sim7080_get_imei(void); 176 : 177 : /** 178 : * Read sms from sim module. 179 : * 180 : * @param buffer Buffer structure for sms. 181 : * @return Number of sms read on success. Otherwise -1 is returned. 182 : * 183 : * @note The buffer structure needs to be initialized to 184 : * the size of the sms buffer. When this function finishes 185 : * successful, nsms will be set to the number of sms read. 186 : * If the whole structure is filled a subsequent read may 187 : * be needed. 188 : */ 189 1 : int mdm_sim7080_read_sms(struct sim7080_sms_buffer *buffer); 190 : 191 : /** 192 : * Delete a sms at a given index. 193 : * 194 : * @param index The index of the sms in memory. 195 : * @return 0 on success. Otherwise -1 is returned. 196 : */ 197 1 : int mdm_sim7080_delete_sms(uint16_t index); 198 : 199 : /** 200 : * Start a ftp get session. 201 : * 202 : * @param server The ftp servers address. 203 : * @param user User name for the ftp server. 204 : * @param passwd Password for the ftp user. 205 : * @param file File to be downloaded. 206 : * @param path Path to the file on the server. 207 : * @return 0 if the session was started. Otherwise -1 is returned. 208 : */ 209 1 : int mdm_sim7080_ftp_get_start(const char *server, const char *user, const char *passwd, 210 : const char *file, const char *path); 211 : 212 : /** 213 : * Read data from a ftp get session. 214 : * 215 : * @param dst The destination buffer. 216 : * @param size Initialize to the size of dst. Gets set to the number 217 : * of bytes actually read. 218 : * @return According sim7080_ftp_rc. 219 : */ 220 1 : int mdm_sim7080_ftp_get_read(char *dst, size_t *size); 221 : 222 : #ifdef __cplusplus 223 : } 224 : #endif 225 : 226 : #endif /* ZEPHYR_INCLUDE_DRIVERS_MODEM_SIMCOM_SIM7080_H */