Send file data demo.
Dependencies: modem_ref_helper CRC DebouncedInterrupt
Diff: main.cpp
- Revision:
- 14:788c749cabed
- Parent:
- 13:43bcbb6fc446
- Child:
- 15:4db98a56f7c1
--- a/main.cpp Fri Mar 09 16:18:52 2018 +0000 +++ b/main.cpp Thu Sep 20 12:26:16 2018 +0000 @@ -12,7 +12,7 @@ Semaphore user_ready(0); Queue<void, 8> modem_resp; -uint8_t g_main_id, g_report_id; +uint8_t id, g_report_id; enum { MODEM_RESP_NO, @@ -40,6 +40,30 @@ button_user.release(); } +void print_status(uint8_t id, int status) +{ + switch (status) + { + case ALP_ERR_NONE: + PRINT("Status[%d]: OK\n", id); + break; + default: + PRINT("Status[%d]: error %d\n", id, status); + break; + } +} + +// Main Callback +void my_main_callback(uint8_t terminal, int8_t err, uint8_t id) +{ + print_status(id, err); + + if (terminal) + { + modem_ready.release(); + } +} + // Response Callback void my_response_callback(uint8_t terminal, int8_t err, uint8_t id) { @@ -73,7 +97,7 @@ osEvent evt; uint32_t resp; uint8_t alarm; - uint8_t my_user_id = modem_get_id(my_response_callback); + uint8_t id = modem_get_id(my_main_callback); d7a_sp_res_t istat; uint8_t nb = 0; @@ -83,9 +107,13 @@ ram_fs_read(FID_ALARM, 0, 1, &alarm); // Send initial value - modem_send_file_content((uint8_t*)&alarm_itf, D7_ITF_SIZE(&alarm_itf), (void*)&istat, FID_ALARM, &alarm, 0, 1, g_main_id); + modem_send_file_content((uint8_t*)&alarm_itf, D7_ITF_SIZE(&alarm_itf), (void*)&istat, FID_ALARM, &alarm, 0, 1, id); modem_ready.wait(); + // Change callback + modem_free_id(id); + id = modem_get_id(my_response_callback); + while (true) { // Wait for button press @@ -105,7 +133,7 @@ PRINT("BUTTON ALARM %d\r\n", alarm); // Send data - modem_send_file_content((uint8_t*)&alarm_itf, D7_ITF_SIZE(&alarm_itf), (void*)&istat, FID_ALARM, &alarm, 0, 1, my_user_id); + modem_send_file_content((uint8_t*)&alarm_itf, D7_ITF_SIZE(&alarm_itf), (void*)&istat, FID_ALARM, &alarm, 0, 1, id); do { @@ -117,7 +145,7 @@ { // Print metadata PRINT("ACK %d: ", ++nb); - PRINT_DATA("ACK UID:", "%02X", istat.addressee.id, 8, " "); + PRINT_DATA("UID:", "%02X", istat.addressee.id, 8, " "); PRINT("SNR: %ddB RXLEV: %ddBm LB: %ddB\n", istat.snr, -istat.rxlev, istat.lb); // Clear istatus buffer @@ -130,7 +158,8 @@ { // Could be because of the RF duty cycle, // especialy after boot where the duty credit is near 0. - // The only thing to do is wait some time for duty credit. + // The only thing to do is wait. + // The transmission will resume once some duty credit is available. PRINT("WAITING...\n"); } else if (MODEM_RESP_ERROR == resp) @@ -147,7 +176,7 @@ // Resume processing user_ready.release(); } - + } while (MODEM_RESP_TERMINAL != resp); PRINT("BUTTON ALARM DONE\r\n"); @@ -162,38 +191,6 @@ memcpy(hdr, ram_fs_get_header(fid), sizeof(alp_file_header_t)); } -void print_status(int status) -{ - switch (status) - { - case ALP_ERR_NONE: - PRINT("Status: OK\n"); - break; - case ALP_ERR_FILE_EXIST: - PRINT("Status: Already registered\n"); - break; - default: - PRINT("Status: error %d\n", status); - break; - } -} - -void print_resp(int status) -{ - switch (status) - { - case ALP_ERR_NONE: - PRINT("Resp: OK\n"); - break; - case ALP_ERR_FILE_EXIST: - PRINT("Resp: Already registered\n"); - break; - default: - PRINT("Resp: error %d\n", status); - break; - } -} - modem_callbacks_t callbacks = { .read = my_read, .write = my_write, @@ -204,25 +201,10 @@ .lqual = my_lqual, .ldown = my_ldown, .reset = my_reset, - .boot = my_boot + .boot = my_boot, + .busy = my_busy, }; -// Callback for g_main_id User -void my_main_callback(uint8_t terminal, int8_t err, uint8_t id) -{ - (void)id; - - if (terminal) - { - print_status(err); - modem_ready.release(); - } - else - { - print_resp(err); - } -} - /*** Main function ------------------------------------------------------------- ***/ int main() @@ -242,7 +224,7 @@ modem_helper_open(&callbacks); - g_main_id = modem_get_id(my_main_callback); + uint8_t id = modem_get_id(my_main_callback); PRINT("Register Files\n"); // HOST Revision is a local file. Uses D7AActP Notification. @@ -255,20 +237,22 @@ // Configure URC: LQUAL on report file notification every 10 reports PRINT("Setup URCs\n"); - modem_enable_urc(ALP_URC_TYPE_LQUAL, IFID_REPORT, 10, true, g_main_id); + modem_enable_urc(ALP_URC_TYPE_LQUAL, IFID_REPORT, 10, true, id); modem_ready.wait(); PRINT("Start D7A Stack\n"); - modem_activate_itf(ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS, true, g_main_id); + modem_activate_itf(ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS, true, id); modem_ready.wait(); PRINT("Notify Modem Version\n"); - modem_notify_file(D7A_FID_FIRMWARE_VERSION, 0, SIZE_HOST_REV, g_main_id); + modem_notify_file(D7A_FID_FIRMWARE_VERSION, 0, SIZE_HOST_REV, id); modem_ready.wait(); PRINT("Notify FW Version\n"); - modem_notify_file(FID_HOST_REV, 0, SIZE_HOST_REV, g_main_id); + modem_notify_file(FID_HOST_REV, 0, SIZE_HOST_REV, id); modem_ready.wait(); + + modem_free_id(id); #ifdef DEBUG_BUTTON DebouncedInterrupt user_interrupt(DEBUG_BUTTON);