Fork for Get Started Demo
Dependencies: DebouncedInterrupt dash7-alp mbed-rtos mbed wizzi-utils
Fork of D7A_Demo_full by
main.cpp@2:c3cfaa7d5bb8, 2015-11-19 (annotated)
- Committer:
- Jeej
- Date:
- Thu Nov 19 17:27:32 2015 +0000
- Revision:
- 2:c3cfaa7d5bb8
- Parent:
- 1:49da0144dd4c
- Child:
- 3:b77b01171cc0
Sending revision test.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 0:aa25c4c8ddbf | 1 | #include "mbed.h" |
Jeej | 0:aa25c4c8ddbf | 2 | #include "rtos.h" |
Jeej | 0:aa25c4c8ddbf | 3 | #include "dbg.h" |
Jeej | 1:49da0144dd4c | 4 | #include "shield.h" |
Jeej | 1:49da0144dd4c | 5 | #include "alp_serial.h" |
Jeej | 1:49da0144dd4c | 6 | #include "alp_device.h" |
Jeej | 2:c3cfaa7d5bb8 | 7 | #include "alp_file.h" |
Jeej | 2:c3cfaa7d5bb8 | 8 | #include "alp_report.h" |
Jeej | 2:c3cfaa7d5bb8 | 9 | |
Jeej | 2:c3cfaa7d5bb8 | 10 | /* |
Jeej | 2:c3cfaa7d5bb8 | 11 | These data are user defined and will be used by the dash7board |
Jeej | 2:c3cfaa7d5bb8 | 12 | to identify the device |
Jeej | 2:c3cfaa7d5bb8 | 13 | */ |
Jeej | 2:c3cfaa7d5bb8 | 14 | |
Jeej | 2:c3cfaa7d5bb8 | 15 | #define __MANUFACTURER_ID__ 0x01234567 // Identify the manufacturer |
Jeej | 2:c3cfaa7d5bb8 | 16 | #define __DEVICE_ID__ 0x89ABCDEF // Identify the device type |
Jeej | 2:c3cfaa7d5bb8 | 17 | |
Jeej | 2:c3cfaa7d5bb8 | 18 | #define __FW_ID__ 0x01 // Device type option |
Jeej | 2:c3cfaa7d5bb8 | 19 | |
Jeej | 2:c3cfaa7d5bb8 | 20 | // Software version |
Jeej | 2:c3cfaa7d5bb8 | 21 | #define __FW_MAJOR__ 0x02 |
Jeej | 2:c3cfaa7d5bb8 | 22 | #define __FW_MINOR__ 0x03 |
Jeej | 2:c3cfaa7d5bb8 | 23 | #define __FW_PATCH__ 0x0005 |
Jeej | 2:c3cfaa7d5bb8 | 24 | #define __FW_HASH__ 0x86605dba |
Jeej | 2:c3cfaa7d5bb8 | 25 | |
Jeej | 2:c3cfaa7d5bb8 | 26 | #define __HW_ID__ 0x01520C02 // Hardware ID |
Jeej | 2:c3cfaa7d5bb8 | 27 | |
Jeej | 2:c3cfaa7d5bb8 | 28 | |
Jeej | 2:c3cfaa7d5bb8 | 29 | revision_t revision = { |
Jeej | 2:c3cfaa7d5bb8 | 30 | // The two first bytes must be present in all reported files |
Jeej | 2:c3cfaa7d5bb8 | 31 | // They are parsed by the dash7board |
Jeej | 2:c3cfaa7d5bb8 | 32 | .nw_stat = 0, |
Jeej | 2:c3cfaa7d5bb8 | 33 | .nw_seq = 255, |
Jeej | 2:c3cfaa7d5bb8 | 34 | // These data are parsed to identify the device |
Jeej | 2:c3cfaa7d5bb8 | 35 | .manufacturer_id = __MANUFACTURER_ID__, |
Jeej | 2:c3cfaa7d5bb8 | 36 | .device_id = __DEVICE_ID__, |
Jeej | 2:c3cfaa7d5bb8 | 37 | .fw_version.fw_id = __FW_ID__, |
Jeej | 2:c3cfaa7d5bb8 | 38 | .fw_version.major = __FW_MAJOR__, |
Jeej | 2:c3cfaa7d5bb8 | 39 | .fw_version.minor = __FW_MINOR__, |
Jeej | 2:c3cfaa7d5bb8 | 40 | .fw_version.patch = __FW_PATCH__, |
Jeej | 2:c3cfaa7d5bb8 | 41 | .fw_version.hash = __FW_HASH__, |
Jeej | 2:c3cfaa7d5bb8 | 42 | .hw_version = __HW_ID__, |
Jeej | 2:c3cfaa7d5bb8 | 43 | .fs_crc = 0 |
Jeej | 2:c3cfaa7d5bb8 | 44 | }; |
Jeej | 2:c3cfaa7d5bb8 | 45 | |
Jeej | 2:c3cfaa7d5bb8 | 46 | // Checks the status of the report send. |
Jeej | 2:c3cfaa7d5bb8 | 47 | void check_status( AlpReport* report, void* param ) |
Jeej | 2:c3cfaa7d5bb8 | 48 | { |
Jeej | 2:c3cfaa7d5bb8 | 49 | char* message = (char*)param; |
Jeej | 2:c3cfaa7d5bb8 | 50 | uint8_t status = report->get_status(); |
Jeej | 2:c3cfaa7d5bb8 | 51 | switch (status) |
Jeej | 2:c3cfaa7d5bb8 | 52 | { |
Jeej | 2:c3cfaa7d5bb8 | 53 | case ALP_CMD_OK: // message is send and acknowleged |
Jeej | 2:c3cfaa7d5bb8 | 54 | DPRINT("%s OK\r\n", message); |
Jeej | 2:c3cfaa7d5bb8 | 55 | break; |
Jeej | 2:c3cfaa7d5bb8 | 56 | case ALP_CMD_TIMEOUT: // message has not been acknowleged by modem |
Jeej | 2:c3cfaa7d5bb8 | 57 | DPRINT("%s CMD TIMEOUT\r\n", message); |
Jeej | 2:c3cfaa7d5bb8 | 58 | break; |
Jeej | 2:c3cfaa7d5bb8 | 59 | case ALP_CMD_ERROR: // message has been acknowleged by modem but returned an error |
Jeej | 2:c3cfaa7d5bb8 | 60 | DPRINT("%s CMD ERROR\r\n", message); |
Jeej | 2:c3cfaa7d5bb8 | 61 | break; |
Jeej | 2:c3cfaa7d5bb8 | 62 | case ALP_D7_TIMEOUT: // message has not been acknowleged by gateway |
Jeej | 2:c3cfaa7d5bb8 | 63 | DPRINT("%s D7 TIMEOUT\r\n", message); |
Jeej | 2:c3cfaa7d5bb8 | 64 | break; |
Jeej | 2:c3cfaa7d5bb8 | 65 | case ALP_D7_ERROR: // message has been acknowleged by gateway but returned an error |
Jeej | 2:c3cfaa7d5bb8 | 66 | DPRINT("%s D7 ERROR\r\n", message); |
Jeej | 2:c3cfaa7d5bb8 | 67 | break; |
Jeej | 2:c3cfaa7d5bb8 | 68 | default: |
Jeej | 2:c3cfaa7d5bb8 | 69 | DPRINT("%s UNKNOWN ERROR %d\r\n", message, status); |
Jeej | 2:c3cfaa7d5bb8 | 70 | break; |
Jeej | 2:c3cfaa7d5bb8 | 71 | } |
Jeej | 2:c3cfaa7d5bb8 | 72 | } |
Jeej | 0:aa25c4c8ddbf | 73 | |
Jeej | 0:aa25c4c8ddbf | 74 | int main() |
Jeej | 0:aa25c4c8ddbf | 75 | { |
Jeej | 0:aa25c4c8ddbf | 76 | // ----- Debug session over USB Serial ----- // |
Jeej | 0:aa25c4c8ddbf | 77 | DBG_OPEN(); |
Jeej | 1:49da0144dd4c | 78 | |
Jeej | 1:49da0144dd4c | 79 | // Clear some lines on the terminal |
Jeej | 1:49da0144dd4c | 80 | DPRINT("\r\n\nBOOT\r\n"); |
Jeej | 0:aa25c4c8ddbf | 81 | |
Jeej | 1:49da0144dd4c | 82 | // Declare Shield NRST pin |
Jeej | 1:49da0144dd4c | 83 | DigitalOut shield_nrst(PB_0); |
Jeej | 1:49da0144dd4c | 84 | |
Jeej | 1:49da0144dd4c | 85 | // Reset shield |
Jeej | 1:49da0144dd4c | 86 | shield_nrst = 0; |
Jeej | 1:49da0144dd4c | 87 | |
Jeej | 1:49da0144dd4c | 88 | // Open ALP port over serial |
Jeej | 1:49da0144dd4c | 89 | // This is the physical ALP serial port |
Jeej | 1:49da0144dd4c | 90 | AlpSerial serial_shield; |
Jeej | 1:49da0144dd4c | 91 | |
Jeej | 1:49da0144dd4c | 92 | // Initialize ALP device |
Jeej | 1:49da0144dd4c | 93 | // This creates an AlpDevice object abstracting the shield1001 |
Jeej | 1:49da0144dd4c | 94 | // The parameters describe how to access it |
Jeej | 1:49da0144dd4c | 95 | AlpDevice shield(&serial_shield, 0, ACCESS_CLASS_EP, ALP_FILE_BLOCK_ISFB, true); |
Jeej | 1:49da0144dd4c | 96 | |
Jeej | 1:49da0144dd4c | 97 | // Release reset |
Jeej | 1:49da0144dd4c | 98 | shield_nrst = 1; |
Jeej | 1:49da0144dd4c | 99 | |
Jeej | 1:49da0144dd4c | 100 | // Check the shield boot packets |
Jeej | 1:49da0144dd4c | 101 | shield_check_boot(&shield); |
Jeej | 1:49da0144dd4c | 102 | |
Jeej | 1:49da0144dd4c | 103 | // Wait for Shield to notify its files if there is any |
Jeej | 1:49da0144dd4c | 104 | Thread::wait(1000); |
Jeej | 0:aa25c4c8ddbf | 105 | |
Jeej | 2:c3cfaa7d5bb8 | 106 | // Add the Report file to the file system |
Jeej | 2:c3cfaa7d5bb8 | 107 | alp_file_add(REVISION_DEVICE_FILE_ID, REVISION_DEVICE_FILE_SIZE, (uint8_t*)&revision); |
Jeej | 2:c3cfaa7d5bb8 | 108 | |
Jeej | 2:c3cfaa7d5bb8 | 109 | // Create the Revision report |
Jeej | 2:c3cfaa7d5bb8 | 110 | AlpReport report_revision(&shield, REVISION_DEVICE_FILE_ID); |
Jeej | 2:c3cfaa7d5bb8 | 111 | |
Jeej | 2:c3cfaa7d5bb8 | 112 | // Attach callback after report is send |
Jeej | 2:c3cfaa7d5bb8 | 113 | report_revision.attach_after(check_status, (void*)"REPORT REVISION"); |
Jeej | 2:c3cfaa7d5bb8 | 114 | |
Jeej | 2:c3cfaa7d5bb8 | 115 | // Send the Revision report |
Jeej | 2:c3cfaa7d5bb8 | 116 | DPRINT("SENDING REPORT REVISION\r\n"); |
Jeej | 2:c3cfaa7d5bb8 | 117 | report_revision.send(); |
Jeej | 2:c3cfaa7d5bb8 | 118 | |
Jeej | 0:aa25c4c8ddbf | 119 | // Set main task to lowest priority |
Jeej | 0:aa25c4c8ddbf | 120 | osThreadSetPriority(osThreadGetId(), osPriorityIdle); |
Jeej | 0:aa25c4c8ddbf | 121 | while(true) |
Jeej | 0:aa25c4c8ddbf | 122 | { |
Jeej | 0:aa25c4c8ddbf | 123 | // Wait to avoid beeing stuck in loop |
Jeej | 0:aa25c4c8ddbf | 124 | Thread::wait(osWaitForever); |
Jeej | 0:aa25c4c8ddbf | 125 | } |
Jeej | 0:aa25c4c8ddbf | 126 | } |