Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Tue Sep 06 15:42:42 2016 +0000
Revision:
53:3e4aa4b57090
Parent:
51:644de6fe1ee7
Child:
55:5ea18a3a01b9
Updated comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 43:28202405094d 1 #include "mbed.h"
Jeej 43:28202405094d 2 #include "rtos.h"
Jeej 43:28202405094d 3 #include "dbg.h"
Jeej 43:28202405094d 4 #include "d7a.h"
Jeej 43:28202405094d 5 #include "d7a_com.h"
Jeej 43:28202405094d 6 #include "d7a_common.h"
Jeej 43:28202405094d 7 #include "d7a_fs.h"
Jeej 43:28202405094d 8 #include "d7a_modem.h"
Jeej 43:28202405094d 9 #include "d7a_sys.h"
Jeej 43:28202405094d 10 #include "d7a_alp.h"
Jeej 43:28202405094d 11
Jeej 49:81d5bddb02f0 12 bool g_open = false;
Jeej 49:81d5bddb02f0 13 bool g_local_fs = false;
Jeej 43:28202405094d 14
Jeej 53:3e4aa4b57090 15
Jeej 49:81d5bddb02f0 16 d7a_errors_t d7a_open(const d7a_com_config_t* com_config, PinName reset_pin, const d7a_callbacks_t* callbacks)
Jeej 43:28202405094d 17 {
Jeej 45:b85384e7d825 18 FPRINT("\r\n");
Jeej 45:b85384e7d825 19
Jeej 49:81d5bddb02f0 20 d7a_errors_t err;
Jeej 49:81d5bddb02f0 21
Jeej 49:81d5bddb02f0 22 if (g_open)
Jeej 49:81d5bddb02f0 23 {
Jeej 51:644de6fe1ee7 24 WARNING(false, "D7A Already open\r\n");
Jeej 49:81d5bddb02f0 25 return D7A_ERR_NONE;
Jeej 49:81d5bddb02f0 26 }
Jeej 49:81d5bddb02f0 27
Jeej 49:81d5bddb02f0 28 err = d7a_com_open(com_config);
Jeej 49:81d5bddb02f0 29 if (err < 0) return err;
Jeej 49:81d5bddb02f0 30
Jeej 49:81d5bddb02f0 31 err = d7a_sys_open();
Jeej 49:81d5bddb02f0 32 if (err < 0) return err;
Jeej 45:b85384e7d825 33
Jeej 49:81d5bddb02f0 34 err = d7a_fs_open(callbacks->write_file, callbacks->read_file);
Jeej 49:81d5bddb02f0 35 if (err < 0) return err;
Jeej 49:81d5bddb02f0 36
Jeej 49:81d5bddb02f0 37 err = d7a_alp_open();
Jeej 49:81d5bddb02f0 38 if (err < 0) return err;
Jeej 49:81d5bddb02f0 39
Jeej 49:81d5bddb02f0 40 err = d7a_modem_open(reset_pin, callbacks->notif_done);
Jeej 49:81d5bddb02f0 41 if (err < 0) return err;
Jeej 49:81d5bddb02f0 42
Jeej 49:81d5bddb02f0 43 if (callbacks->write_file != NULL && callbacks->read_file != NULL)
Jeej 49:81d5bddb02f0 44 {
Jeej 49:81d5bddb02f0 45 g_local_fs = true;
Jeej 49:81d5bddb02f0 46 }
Jeej 49:81d5bddb02f0 47
Jeej 49:81d5bddb02f0 48 g_open = true;
Jeej 49:81d5bddb02f0 49
Jeej 49:81d5bddb02f0 50 return err;
Jeej 43:28202405094d 51 }
Jeej 43:28202405094d 52
Jeej 53:3e4aa4b57090 53
Jeej 45:b85384e7d825 54 d7a_errors_t d7a_close(void)
Jeej 43:28202405094d 55 {
Jeej 45:b85384e7d825 56 FPRINT("\r\n");
Jeej 45:b85384e7d825 57
Jeej 49:81d5bddb02f0 58 d7a_errors_t err;
Jeej 49:81d5bddb02f0 59
Jeej 43:28202405094d 60 // TODO
Jeej 43:28202405094d 61 //d7a_modem_close();
Jeej 43:28202405094d 62 //d7a_fs_close();
Jeej 43:28202405094d 63 //d7a_sys_close();
Jeej 50:30440c9aeb7c 64 err = d7a_com_close();
Jeej 45:b85384e7d825 65
Jeej 50:30440c9aeb7c 66 return err;
Jeej 43:28202405094d 67 }
Jeej 43:28202405094d 68
Jeej 43:28202405094d 69
Jeej 45:b85384e7d825 70 d7a_errors_t d7a_start(void)
Jeej 43:28202405094d 71 {
Jeej 45:b85384e7d825 72 FPRINT("\r\n");
Jeej 45:b85384e7d825 73
Jeej 49:81d5bddb02f0 74 d7a_errors_t err;
Jeej 49:81d5bddb02f0 75
Jeej 50:30440c9aeb7c 76 err = d7a_modem_start();
Jeej 45:b85384e7d825 77
Jeej 50:30440c9aeb7c 78 return err;
Jeej 43:28202405094d 79 }
Jeej 43:28202405094d 80
Jeej 53:3e4aa4b57090 81
Jeej 45:b85384e7d825 82 d7a_errors_t d7a_stop(void)
Jeej 43:28202405094d 83 {
Jeej 45:b85384e7d825 84 FPRINT("\r\n");
Jeej 45:b85384e7d825 85
Jeej 49:81d5bddb02f0 86 d7a_errors_t err;
Jeej 49:81d5bddb02f0 87
Jeej 50:30440c9aeb7c 88 err = d7a_modem_stop();
Jeej 45:b85384e7d825 89
Jeej 50:30440c9aeb7c 90 return err;
Jeej 43:28202405094d 91 }
Jeej 43:28202405094d 92
Jeej 53:3e4aa4b57090 93
Jeej 45:b85384e7d825 94 d7a_errors_t d7a_create(const uint8_t file_id, d7a_fs_storage_t prop, d7a_fs_perm_t perm, uint32_t size, uint32_t alloc, uint8_t action_file, uint8_t interface)
Jeej 43:28202405094d 95 {
Jeej 45:b85384e7d825 96 FPRINT("\r\n");
Jeej 45:b85384e7d825 97
Jeej 45:b85384e7d825 98 d7a_errors_t err;
Jeej 45:b85384e7d825 99
Jeej 45:b85384e7d825 100 DPRINT("Create %d.\r\n", file_id);
Jeej 45:b85384e7d825 101
Jeej 43:28202405094d 102 register_file_param_t file_infos = {
Jeej 43:28202405094d 103 .fid = file_id,
Jeej 45:b85384e7d825 104 .type = RAM,
Jeej 43:28202405094d 105 .afid = action_file,
Jeej 43:28202405094d 106 .ifid = interface,
Jeej 45:b85384e7d825 107 .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0),
Jeej 43:28202405094d 108 .perm = (uint8_t)perm,
Jeej 43:28202405094d 109 .size = size,
Jeej 43:28202405094d 110 .alloc = alloc,
Jeej 43:28202405094d 111 };
Jeej 43:28202405094d 112
Jeej 45:b85384e7d825 113 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 114
Jeej 45:b85384e7d825 115 DPRINT("Create %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 116
Jeej 45:b85384e7d825 117 return err;
Jeej 43:28202405094d 118 }
Jeej 43:28202405094d 119
Jeej 53:3e4aa4b57090 120
Jeej 45:b85384e7d825 121 d7a_errors_t d7a_declare(const uint8_t file_id, d7a_fs_storage_t prop, d7a_fs_perm_t perm, uint32_t length, uint32_t alloc, uint8_t action_file, uint8_t interface)
Jeej 43:28202405094d 122 {
Jeej 45:b85384e7d825 123 FPRINT("\r\n");
Jeej 49:81d5bddb02f0 124
Jeej 46:665391110051 125 d7a_errors_t err;
Jeej 46:665391110051 126
Jeej 45:b85384e7d825 127 DPRINT("Declare %d.\r\n", file_id);
Jeej 45:b85384e7d825 128
Jeej 49:81d5bddb02f0 129 ASSERT(g_local_fs, "You cannot delare a file is the write_file/read_file callbacks are not specified\r\n");
Jeej 49:81d5bddb02f0 130
Jeej 43:28202405094d 131 register_file_param_t file_infos = {
Jeej 43:28202405094d 132 .fid = file_id,
Jeej 45:b85384e7d825 133 .type = HOST+RAM,
Jeej 43:28202405094d 134 .afid = action_file,
Jeej 43:28202405094d 135 .ifid = interface,
Jeej 45:b85384e7d825 136 .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0),
Jeej 43:28202405094d 137 .perm = (uint8_t)perm,
Jeej 43:28202405094d 138 .size = length,
Jeej 43:28202405094d 139 .alloc = alloc,
Jeej 43:28202405094d 140 };
Jeej 43:28202405094d 141
Jeej 46:665391110051 142 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 143
Jeej 45:b85384e7d825 144 DPRINT("Declare %d Done\r\n", file_id);
Jeej 45:b85384e7d825 145
Jeej 46:665391110051 146 return err;
Jeej 43:28202405094d 147 }
Jeej 43:28202405094d 148
Jeej 53:3e4aa4b57090 149
Jeej 46:665391110051 150 d7a_errors_t d7a_read(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* buf, d7a_addressee_t* addressee, alp_rpol_t retry)
Jeej 43:28202405094d 151 {
Jeej 45:b85384e7d825 152 FPRINT("\r\n");
Jeej 45:b85384e7d825 153
Jeej 46:665391110051 154 d7a_errors_t err;
Jeej 46:665391110051 155
Jeej 51:644de6fe1ee7 156 DPRINT("Read %d.\r\n", file_id);
Jeej 46:665391110051 157
Jeej 46:665391110051 158 err = d7a_alp_read_file(file_id, offset, size, buf, addressee, retry);
Jeej 46:665391110051 159
Jeej 51:644de6fe1ee7 160 DPRINT("Read %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 161
Jeej 46:665391110051 162 return err;
Jeej 46:665391110051 163 }
Jeej 46:665391110051 164
Jeej 53:3e4aa4b57090 165
Jeej 46:665391110051 166 d7a_errors_t d7a_write(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* const buf, d7a_addressee_t* addressee, alp_rpol_t retry, bool resp)
Jeej 46:665391110051 167 {
Jeej 46:665391110051 168 FPRINT("\r\n");
Jeej 46:665391110051 169
Jeej 46:665391110051 170 d7a_errors_t err;
Jeej 46:665391110051 171
Jeej 46:665391110051 172 DPRINT("Write %d.\r\n", file_id);
Jeej 46:665391110051 173
Jeej 46:665391110051 174 err = d7a_alp_write_file(file_id, offset, size, buf, addressee, retry, resp);
Jeej 46:665391110051 175
Jeej 46:665391110051 176 DPRINT("Write %d Done. err %d\r\n", file_id, err);
Jeej 46:665391110051 177
Jeej 46:665391110051 178 return err;
Jeej 43:28202405094d 179 }
Jeej 43:28202405094d 180
Jeej 53:3e4aa4b57090 181
Jeej 46:665391110051 182 d7a_errors_t d7a_notify(const uint8_t file_id, const uint32_t offset, const uint32_t size)
Jeej 43:28202405094d 183 {
Jeej 45:b85384e7d825 184 FPRINT("\r\n");
Jeej 45:b85384e7d825 185
Jeej 46:665391110051 186 d7a_errors_t err;
Jeej 46:665391110051 187
Jeej 46:665391110051 188 DPRINT("Notify %d.\r\n", file_id);
Jeej 45:b85384e7d825 189
Jeej 46:665391110051 190 notify_file_param_t notif = {
Jeej 46:665391110051 191 .bf.fid = file_id,
Jeej 46:665391110051 192 .bf.offset = offset,
Jeej 46:665391110051 193 .bf.size = size
Jeej 46:665391110051 194 };
Jeej 46:665391110051 195
Jeej 46:665391110051 196 err = d7a_modem_notify(&notif);
Jeej 46:665391110051 197
Jeej 46:665391110051 198 DPRINT("Notify %d Done. err %d\r\n", file_id, err);
Jeej 46:665391110051 199
Jeej 46:665391110051 200 return err;
Jeej 50:30440c9aeb7c 201 }
Jeej 50:30440c9aeb7c 202
Jeej 50:30440c9aeb7c 203
Jeej 50:30440c9aeb7c 204 void d7a_modem_print_infos(void)
Jeej 50:30440c9aeb7c 205 {
Jeej 50:30440c9aeb7c 206 uint8_t uid[8];
Jeej 50:30440c9aeb7c 207 d7a_revision_t rev;
Jeej 50:30440c9aeb7c 208
Jeej 50:30440c9aeb7c 209 ASSERT(d7a_read(0, 0, 8, uid) >= D7A_ERR_NONE, "Failed to read UID file\r\n");
Jeej 50:30440c9aeb7c 210 ASSERT(d7a_read(2, 0, sizeof(d7a_revision_t), (uint8_t*)&rev) >= D7A_ERR_NONE, "Failed to read REV file\r\n");
Jeej 50:30440c9aeb7c 211
Jeej 50:30440c9aeb7c 212 PRINT("------------ D7A Modem infos ------------\r\n");
Jeej 50:30440c9aeb7c 213 PRINT_DATA("| UID: ", "%02X", uid, 8, " |\r\n");
Jeej 50:30440c9aeb7c 214 PRINT("| Manufacturer ID: %08X |\r\n", rev.manufacturer_id);
Jeej 50:30440c9aeb7c 215 PRINT("| Device ID: %08X |\r\n", rev.device_id);
Jeej 50:30440c9aeb7c 216 PRINT("| Hardware version: %08X |\r\n", rev.hw_version);
Jeej 50:30440c9aeb7c 217 PRINT("| Firmware version: %d-%d.%d.%d-%08x \t|\r\n", rev.fw_version.id, rev.fw_version.major, rev.fw_version.minor, rev.fw_version.patch, rev.fw_version.hash);
Jeej 50:30440c9aeb7c 218 PRINT("| File system CRC: 0x%08x |\r\n", rev.fs_crc);
Jeej 50:30440c9aeb7c 219 PRINT("-----------------------------------------\r\n");
Jeej 50:30440c9aeb7c 220
Jeej 43:28202405094d 221 }