example-ublox-csim-cellular
Dependencies: ublox-at-cellular-interface ublox-cellular-base
main.cpp@0:daa596318097, 2019-11-08 (annotated)
- Committer:
- mudassar0121
- Date:
- Fri Nov 08 12:01:17 2019 +0500
- Revision:
- 0:daa596318097
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mudassar0121 |
0:daa596318097 | 1 | /* mbed Microcontroller Library |
mudassar0121 |
0:daa596318097 | 2 | * Copyright (c) 2017 u-blox |
mudassar0121 |
0:daa596318097 | 3 | * |
mudassar0121 |
0:daa596318097 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
mudassar0121 |
0:daa596318097 | 5 | * you may not use this file except in compliance with the License. |
mudassar0121 |
0:daa596318097 | 6 | * You may obtain a copy of the License at |
mudassar0121 |
0:daa596318097 | 7 | * |
mudassar0121 |
0:daa596318097 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
mudassar0121 |
0:daa596318097 | 9 | * |
mudassar0121 |
0:daa596318097 | 10 | * Unless required by applicable law or agreed to in writing, software |
mudassar0121 |
0:daa596318097 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
mudassar0121 |
0:daa596318097 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
mudassar0121 |
0:daa596318097 | 13 | * See the License for the specific language governing permissions and |
mudassar0121 |
0:daa596318097 | 14 | * limitations under the License. |
mudassar0121 |
0:daa596318097 | 15 | */ |
mudassar0121 |
0:daa596318097 | 16 | #include "mbed.h" |
mudassar0121 |
0:daa596318097 | 17 | #include "UbloxATCellularInterface.h" |
mudassar0121 |
0:daa596318097 | 18 | |
mudassar0121 |
0:daa596318097 | 19 | |
mudassar0121 |
0:daa596318097 | 20 | // INTERFACE_CLASS *interface = new INTERFACE_CLASS(); |
mudassar0121 |
0:daa596318097 | 21 | // If you need to debug the cellular interface, comment out the |
mudassar0121 |
0:daa596318097 | 22 | // instantiation above and uncomment the one below. |
mudassar0121 |
0:daa596318097 | 23 | // For the N2xx interface, change xxx to MBED_CONF_UBLOX_CELL_BAUD_RATE, |
mudassar0121 |
0:daa596318097 | 24 | // while for the non-N2xx interface change it to MBED_CONF_UBLOX_CELL_N2XX_BAUD_RATE |
mudassar0121 |
0:daa596318097 | 25 | UbloxATCellularInterface *interface = new UbloxATCellularInterface(MDMTXD, MDMRXD, 115200, false); |
mudassar0121 |
0:daa596318097 | 26 | |
mudassar0121 |
0:daa596318097 | 27 | // LEDs |
mudassar0121 |
0:daa596318097 | 28 | DigitalOut ledRed(LED1, 1); |
mudassar0121 |
0:daa596318097 | 29 | DigitalOut ledGreen(LED2, 1); |
mudassar0121 |
0:daa596318097 | 30 | DigitalOut ledBlue(LED3, 1); |
mudassar0121 |
0:daa596318097 | 31 | |
mudassar0121 |
0:daa596318097 | 32 | void swap(char* a, char* b) |
mudassar0121 |
0:daa596318097 | 33 | { |
mudassar0121 |
0:daa596318097 | 34 | char c; |
mudassar0121 |
0:daa596318097 | 35 | |
mudassar0121 |
0:daa596318097 | 36 | c = *a; |
mudassar0121 |
0:daa596318097 | 37 | *a = *b; |
mudassar0121 |
0:daa596318097 | 38 | *b = c; |
mudassar0121 |
0:daa596318097 | 39 | } |
mudassar0121 |
0:daa596318097 | 40 | |
mudassar0121 |
0:daa596318097 | 41 | void csim_read_imsi(char* imsi) |
mudassar0121 |
0:daa596318097 | 42 | { |
mudassar0121 |
0:daa596318097 | 43 | char response[20], SW1[3], SW2[3]; |
mudassar0121 |
0:daa596318097 | 44 | |
mudassar0121 |
0:daa596318097 | 45 | if (interface->csim_select_file(14, "00A40000023F00")) { |
mudassar0121 |
0:daa596318097 | 46 | if (interface->csim_select_file(14, "00A40000027F20")) { |
mudassar0121 |
0:daa596318097 | 47 | if (interface->csim_select_file(14, "00A40000026F07")) { |
mudassar0121 |
0:daa596318097 | 48 | int len = interface->csim_read_file(10, "00B0000009", response, SW1, SW2); |
mudassar0121 |
0:daa596318097 | 49 | if (strcmp(SW1 , "90") == 0 && strcmp(SW2 , "00") == 0) { |
mudassar0121 |
0:daa596318097 | 50 | for (int a = 2; a < len - 4; a = a + 2) { |
mudassar0121 |
0:daa596318097 | 51 | swap(&response[a], &response[a+1]); |
mudassar0121 |
0:daa596318097 | 52 | } |
mudassar0121 |
0:daa596318097 | 53 | memcpy(imsi, response+3, 15); |
mudassar0121 |
0:daa596318097 | 54 | imsi[15] = '\0'; |
mudassar0121 |
0:daa596318097 | 55 | } |
mudassar0121 |
0:daa596318097 | 56 | } |
mudassar0121 |
0:daa596318097 | 57 | } |
mudassar0121 |
0:daa596318097 | 58 | } |
mudassar0121 |
0:daa596318097 | 59 | } |
mudassar0121 |
0:daa596318097 | 60 | |
mudassar0121 |
0:daa596318097 | 61 | void csim_read_iccid(char* iccid) |
mudassar0121 |
0:daa596318097 | 62 | { |
mudassar0121 |
0:daa596318097 | 63 | char response[25], SW1[3], SW2[3]; |
mudassar0121 |
0:daa596318097 | 64 | |
mudassar0121 |
0:daa596318097 | 65 | if (interface->csim_select_file(14, "00A40000023F00")) { |
mudassar0121 |
0:daa596318097 | 66 | if (interface->csim_select_file(14, "00A40000022FE2")) { |
mudassar0121 |
0:daa596318097 | 67 | int len = interface->csim_read_file(10, "00B0000010", response, SW1, SW2); |
mudassar0121 |
0:daa596318097 | 68 | if (strcmp(SW1 , "90") == 0 && strcmp(SW2 , "00") == 0) { |
mudassar0121 |
0:daa596318097 | 69 | for (int a = 0; a < len - 4; a = a + 2) { |
mudassar0121 |
0:daa596318097 | 70 | swap(&response[a], &response[a+1]); |
mudassar0121 |
0:daa596318097 | 71 | } |
mudassar0121 |
0:daa596318097 | 72 | memcpy(iccid, response, 19); |
mudassar0121 |
0:daa596318097 | 73 | iccid[20] = '\0'; |
mudassar0121 |
0:daa596318097 | 74 | } |
mudassar0121 |
0:daa596318097 | 75 | } |
mudassar0121 |
0:daa596318097 | 76 | } |
mudassar0121 |
0:daa596318097 | 77 | } |
mudassar0121 |
0:daa596318097 | 78 | |
mudassar0121 |
0:daa596318097 | 79 | int main() |
mudassar0121 |
0:daa596318097 | 80 | { |
mudassar0121 |
0:daa596318097 | 81 | printf("\r\nu-blox C030 U201 and R412M reading the modem IMSI and ICCID using CSIM\n\r\n\r"); |
mudassar0121 |
0:daa596318097 | 82 | |
mudassar0121 |
0:daa596318097 | 83 | char imsi[20], iccid[20]; |
mudassar0121 |
0:daa596318097 | 84 | |
mudassar0121 |
0:daa596318097 | 85 | interface->init(); |
mudassar0121 |
0:daa596318097 | 86 | |
mudassar0121 |
0:daa596318097 | 87 | csim_read_imsi(imsi); |
mudassar0121 |
0:daa596318097 | 88 | printf("IMSI = %s \r\n\r\n", imsi); |
mudassar0121 |
0:daa596318097 | 89 | |
mudassar0121 |
0:daa596318097 | 90 | csim_read_iccid(iccid); |
mudassar0121 |
0:daa596318097 | 91 | printf("ICCID = %s \r\n", iccid); |
mudassar0121 |
0:daa596318097 | 92 | |
mudassar0121 |
0:daa596318097 | 93 | |
mudassar0121 |
0:daa596318097 | 94 | // Set the LED states |
mudassar0121 |
0:daa596318097 | 95 | ledRed = 0; |
mudassar0121 |
0:daa596318097 | 96 | ledGreen = 1; |
mudassar0121 |
0:daa596318097 | 97 | ledBlue = 1; |
mudassar0121 |
0:daa596318097 | 98 | |
mudassar0121 |
0:daa596318097 | 99 | // Main loop |
mudassar0121 |
0:daa596318097 | 100 | while(1) { |
mudassar0121 |
0:daa596318097 | 101 | wait(1); |
mudassar0121 |
0:daa596318097 | 102 | // Shift the LED states |
mudassar0121 |
0:daa596318097 | 103 | int carry = ledBlue; |
mudassar0121 |
0:daa596318097 | 104 | ledBlue = ledRed; |
mudassar0121 |
0:daa596318097 | 105 | ledRed = ledGreen; |
mudassar0121 |
0:daa596318097 | 106 | ledGreen = carry; |
mudassar0121 |
0:daa596318097 | 107 | } |
mudassar0121 |
0:daa596318097 | 108 | } |
mudassar0121 |
0:daa596318097 | 109 | // End Of File |