{"product_id":"cellular-iot-a-practical-guide-for-software-developers-electrical-engineers-and-project-managers-hardback-9781394329656","title":"Cellular IoT; A Practical Guide for Software Developers, Electrical Engineers, and Project Managers (Hardback) 9781394329656","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eCellular IoT\u003c\/font\u003e\u003cbr\u003e\r\n\u003cfont size=\"5\"\u003eA Practical Guide for Software Developers, Electrical Engineers, and Project Managers\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\u003cp\u003e\u003cfont size=\"4\"\u003eMatthew A. Brenner (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9781394329656, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eHardback, published 22 April 2026\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e512 pages\u003cbr\u003e23.1 x 15.8 x 3.3 cm, 0.794 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\u003cp\u003e\u003cb\u003eDetailed, practical guidance for implementing IoT cellular network connectivity solutions for software developers and electrical engineers, and project managers.\u003c\/b\u003e \u003c\/p\u003e\n\u003cp\u003eFocusing exclusively on using cellular connectivity for IoT devices, \u003ci\u003eCellular IoT \u003c\/i\u003epresents a flexible approach, using algorithms and software designs, to drastically reduce the complexity of interacting with a wide variety of Cellular Communication Modules (CCMs) which lie at the heart of cellular modems. Written in an accessible style, this book is one of the first to cover all practical aspects of cellular network connectivity, from network and SIM selection through to custom algorithms for detecting and recovering from a wide variety of connectivity problems, and an innovative approach to reliably manage AT commands in modern cellular modems. \u003c\/p\u003e\n\u003cp\u003eThis book explains the factors related to establishing and maintaining cellular connectivity including geography and topology, population density, SIM card (and connectivity provider) selection, antenna choice and placement, and CCM selection. The book also provides detailed examples and troubleshooting advice, showing how to transfer data using low-level sockets and also using a high-level protocol (HTTP), creating a brief, temporary connection for a primitive IoT device to send a small amount of data, and also establishing and maintaining a continuous cellular connection with full Internet access on powerful IoT devices running Linux. \u003c\/p\u003e\n\u003cp\u003eWritten by an author with considerable professional expertise and experience with cellular connectivity, \u003ci\u003eCellular IoT\u003c\/i\u003e includes information on: \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003ePlatforms, tools, and debugging, covering tool-chain selection, computing\/OS platforms, programming language choices, and running IoT connectivity code in a debugger\u003c\/li\u003e\n\u003cli\u003eCellular network basics, covering base stations, range, cell towers, tracking areas and paging, frequency and modulation, bandwidth and latency, frequency bands, and SIM cards\u003c\/li\u003e\n\u003cli\u003eSimilarities and differences across CCMs, frequency, band, Radio Access Technology (RAT), protocol and data representation, selection and consequences\u003c\/li\u003e\n\u003cli\u003eLow-level communication protocols including transmission control protocol (TCP), user datagram protocol (UDP), point-to-point protocol (PPP), and custom hybrids for cellular IoT\u003c\/li\u003e\n\u003cli\u003eFull coverage of SMS, GNSS (available in most CCMs), obtaining precise time, and utilizing the power saving functionality of Extended Discontinuous Reception (eDRX) and Power Saving Mode (PSM) available in NB-IoT, LTE Cat M and LTE Cat 1 bis CCMs\u003c\/li\u003e\n\u003cli\u003eEntirely new and innovative software approach, Command Independent Processing (CIP), to systematically manage and execute AT commands across families of CCMs and integrating standardized (3GPP) AT commands with vendor specific ones to achieve greater software portability across CCMs\u003c\/li\u003e\n\u003c\/ul\u003e \u003cp\u003e\u003ci\u003eCellular IoT\u003c\/i\u003e is an essential resource for software developers, hardware engineers, and project managers seeking to avoid connectivity pitfalls and be better able to diagnose and resolve newly encountered challenges in the field while drastically reducing the time required to produce reliable, IoT connectivity solutions.\u003c\/p\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003ePreface xix\u003c\/p\u003e \u003cp\u003eAcknowledgement xxi\u003c\/p\u003e \u003cp\u003e\u003cb\u003e1 Introduction 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e1.1 Wireless Connectivity Alternatives 1\u003c\/p\u003e \u003cp\u003e1.2 Goals 2\u003c\/p\u003e \u003cp\u003e1.3 The Fundamental Problem 3\u003c\/p\u003e \u003cp\u003e1.4 Audience 4\u003c\/p\u003e \u003cp\u003e1.5 Recommended Reading 5\u003c\/p\u003e \u003cp\u003e1.6 Can One Size Fit All? 6\u003c\/p\u003e \u003cp\u003e1.7 Hardware History 6\u003c\/p\u003e \u003cp\u003e1.8 On-the-move Connectivity Problems 7\u003c\/p\u003e \u003cp\u003e1.9 Reference Implementations 8\u003c\/p\u003e \u003cp\u003e1.10 Reference Microcontroller\/OS Platform 9\u003c\/p\u003e \u003cp\u003e1.11 Reference Cellular Communication Modules (CCMs) Family 11\u003c\/p\u003e \u003cp\u003e1.12 A Few Words on Advice, Practices, and Efficiency 13\u003c\/p\u003e \u003cp\u003e1.12.1 Best Practice or Good Practice 14\u003c\/p\u003e \u003cp\u003e1.12.2 Efficiency Is a Large Umbrella 14\u003c\/p\u003e \u003cp\u003e1.12.2.1 Spatial and Temporal Efficiency 14\u003c\/p\u003e \u003cp\u003e1.12.2.2 Data Efficiency 15\u003c\/p\u003e \u003cp\u003e1.12.2.3 Developmental Efficiency 17\u003c\/p\u003e \u003cp\u003e1.13 3G, 4G, 5G, and 6G 17\u003c\/p\u003e \u003cp\u003e\u003cb\u003e2 Platforms, Tools, and Debugging 19\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e2.1 Importance of Toolchain Selection 19\u003c\/p\u003e \u003cp\u003e2.2 An Expanded View of the Tool Chain 21\u003c\/p\u003e \u003cp\u003e2.3 Computing\/OS Platforms 21\u003c\/p\u003e \u003cp\u003e2.4 Programming Language Choices 23\u003c\/p\u003e \u003cp\u003e2.5 Running the Same Code on Development Computer and IoT Device 23\u003c\/p\u003e \u003cp\u003e2.6 Running IoT Connectivity Code in a Debugger 24\u003c\/p\u003e \u003cp\u003e\u003cb\u003e3 Cellular Network Basics 27\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e3.1 Standards 27\u003c\/p\u003e \u003cp\u003e3.2 What Do Cellular Networks Do? 28\u003c\/p\u003e \u003cp\u003e3.3 Are Cellular Networks Wireless? 29\u003c\/p\u003e \u003cp\u003e3.4 What Is a Cell? What Is a Sector? 30\u003c\/p\u003e \u003cp\u003e3.5 Omnidirectional Cellular Coverage 33\u003c\/p\u003e \u003cp\u003e3.6 Cell Towers 34\u003c\/p\u003e \u003cp\u003e3.7 How Are Cellular Networks Identified? 37\u003c\/p\u003e \u003cp\u003e3.8 How Are IoT Devices Identified? 39\u003c\/p\u003e \u003cp\u003e3.9 eNodeB IDs and Cell # 40\u003c\/p\u003e \u003cp\u003e3.10 Tracking Areas and Paging 40\u003c\/p\u003e \u003cp\u003e3.11 Frequency and Modulation 42\u003c\/p\u003e \u003cp\u003e3.11.1 Modulation 43\u003c\/p\u003e \u003cp\u003e3.11.1.1 Radio Telegraphy 43\u003c\/p\u003e \u003cp\u003e3.11.1.2 Amplitude Modulation (AM Radio) 44\u003c\/p\u003e \u003cp\u003e3.11.1.3 Frequency Modulation (FM Radio) 45\u003c\/p\u003e \u003cp\u003e3.11.1.4 Phase Modulation 47\u003c\/p\u003e \u003cp\u003e3.12 Spectral Efficiency 48\u003c\/p\u003e \u003cp\u003e3.13 Error Detection 49\u003c\/p\u003e \u003cp\u003e3.13.1 Luhn Algorithm 50\u003c\/p\u003e \u003cp\u003e3.14 Error Correction 52\u003c\/p\u003e \u003cp\u003e3.15 LTE Modulation Techniques 54\u003c\/p\u003e \u003cp\u003e3.15.1 Binary Phase Shift Keying (BPSK) 56\u003c\/p\u003e \u003cp\u003e3.15.2 Quadrature Phase Shift Keying (QPSK) 57\u003c\/p\u003e \u003cp\u003e3.15.3 Quadrature Amplitude Modulation (QAM) 57\u003c\/p\u003e \u003cp\u003e3.16 Bandwidth and Latency 57\u003c\/p\u003e \u003cp\u003e3.17 Range 58\u003c\/p\u003e \u003cp\u003e3.18 Frequency Bands 59\u003c\/p\u003e \u003cp\u003e3.18.1 Frequency Affects Range 60\u003c\/p\u003e \u003cp\u003e3.19 Radio Access Technologies (RAT) and Categories 61\u003c\/p\u003e \u003cp\u003e3.20 SIM Cards 63\u003c\/p\u003e \u003cp\u003e3.21 What Happens When a Cellular Modem Switches On? 64\u003c\/p\u003e \u003cp\u003e3.21.1 Network Selection, Cell Selection, Camping, and Cell Reselection 64\u003c\/p\u003e \u003cp\u003e3.21.2 Network Registration 65\u003c\/p\u003e \u003cp\u003e3.22 Handoff (Also Called Handover) 67\u003c\/p\u003e \u003cp\u003e3.22.1 Maintaining Connectivity 67\u003cbr\u003e 3.22.2 Load Balancing 69\u003c\/p\u003e \u003cp\u003e3.23 Multiple Access 70\u003c\/p\u003e \u003cp\u003e3.24 Timing Advance 70\u003c\/p\u003e \u003cp\u003e3.24.1 Why Is Timing Advance Useful? 73\u003c\/p\u003e \u003cp\u003e3.24.2 How Accurate Are Distance Estimates Using Timing Advance? 73\u003c\/p\u003e \u003cp\u003e3.24.3 Timing Advance Band Depth and Maximum Range 77\u003c\/p\u003e \u003cp\u003e3.25 Expressing Power 77\u003c\/p\u003e \u003cp\u003e\u003cb\u003e4 SIM\/USIM Card Basics 81\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e4.1 Mobile Virtual Network Operators (MVNOs) 81\u003c\/p\u003e \u003cp\u003e4.2 Size 82\u003c\/p\u003e \u003cp\u003e4.3 Native Versus Multi-SIMs or MNO Versus MVNO 84\u003c\/p\u003e \u003cp\u003e4.4 Home Versus Roaming Access 85\u003c\/p\u003e \u003cp\u003e4.5 SIM Factors Affecting Price and Coverage 86\u003c\/p\u003e \u003cp\u003e4.5.1 How Much Do SIM Cards Cost? 88\u003c\/p\u003e \u003cp\u003e4.5.2 Is There a Monthly Activation Fee? 88\u003c\/p\u003e \u003cp\u003e4.5.3 Are There Fees for Activating and\/or Deactivating SIM Cards? 88\u003c\/p\u003e \u003cp\u003e4.5.4 How Much Does Data Cost? 88\u003c\/p\u003e \u003cp\u003e4.5.5 Is the Monthly Data “Pooled”? 89\u003c\/p\u003e \u003cp\u003e4.5.6 Are There Fees for Deactivated (but Not Terminated) SIMs Cards? 90\u003c\/p\u003e \u003cp\u003e4.5.7 Is There a Not-yet-activated Fee? 90\u003c\/p\u003e \u003cp\u003e4.6 Text Messages (SMS) 91\u003c\/p\u003e \u003cp\u003e4.7 Usage Limits 91\u003c\/p\u003e \u003cp\u003e4.8 Firewalls 92\u003c\/p\u003e \u003cp\u003e4.9 Replacing SIMs and\/or Network Providers 94\u003c\/p\u003e \u003cp\u003e4.10 Access Point Name (APN) 96\u003c\/p\u003e \u003cp\u003e\u003cb\u003e5 Verify Cellular Connectivity 97\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e5.1 Preparation 98\u003c\/p\u003e \u003cp\u003e5.1.1 Adequate Power 98\u003c\/p\u003e \u003cp\u003e5.1.2 Activated SIM Card 100\u003c\/p\u003e \u003cp\u003e5.1.3 Base Station in Range 100\u003c\/p\u003e \u003cp\u003e5.1.4 SIM Card Authorization 100\u003c\/p\u003e \u003cp\u003e5.1.5 Band Configuration 100\u003c\/p\u003e \u003cp\u003e5.1.6 RAT Configuration 101\u003c\/p\u003e \u003cp\u003e5.1.7 Automatic Registration 101\u003c\/p\u003e \u003cp\u003e5.2 Try to Auto-register 101\u003c\/p\u003e \u003cp\u003e5.3 What Can Go Wrong? 102\u003c\/p\u003e \u003cp\u003e5.3.1 Operating System Interference 102\u003c\/p\u003e \u003cp\u003e5.3.2 Communicating with Modem 103\u003c\/p\u003e \u003cp\u003e5.3.3 Malformed AT Commands 103\u003c\/p\u003e \u003cp\u003e5.3.4 Parsing Responses to AT Commands 103\u003c\/p\u003e \u003cp\u003e5.3.5 Timing Problems 104\u003c\/p\u003e \u003cp\u003e5.3.6 Unset or Incorrect Access Point Name (APN) 107\u003c\/p\u003e \u003cp\u003e5.3.6.1 Pitfall: Failing to Explicitly Set the APN 107\u003c\/p\u003e \u003cp\u003e5.4 Modem Configuration for Auto-registration 108\u003c\/p\u003e \u003cp\u003e\u003cb\u003e6 Let’s Move Some Data 111\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e6.1 Low-level Sockets or High-level Protocols 112\u003c\/p\u003e \u003cp\u003e6.2 Verify ServerServer Is Running 116\u003c\/p\u003e \u003cp\u003e6.3 Verify EchoServer Is Running 117\u003c\/p\u003e \u003cp\u003e6.4 USB or UART? 117\u003c\/p\u003e \u003cp\u003e6.4.1 Pitfall: USB Device Names Are Not Fixed and Should Not Be Hard Coded 118\u003c\/p\u003e \u003cp\u003e6.5 AT Commands—A Troubled Past 119\u003c\/p\u003e \u003cp\u003e6.6 Unsolicited Response Codes (URCs) 120\u003c\/p\u003e \u003cp\u003e6.7 A Handy Modem Program 123\u003c\/p\u003e \u003cp\u003e6.8 AT Commands Manuals 130\u003c\/p\u003e \u003cp\u003e6.9 Communicating with the Cellular Modem 131\u003c\/p\u003e \u003cp\u003e6.10 Getting EchoServer Information from ServerServer 134\u003c\/p\u003e \u003cp\u003e6.10.1 Before Step 1: Enable Unsolicited Response Codes (URCs) 135\u003c\/p\u003e \u003cp\u003e6.10.2 Step 1: Configure PDP Context for HTTP GET 136\u003c\/p\u003e \u003cp\u003e6.10.3 Step 2: Configure a PDP Context 136\u003c\/p\u003e \u003cp\u003e6.10.3.1 Test Commands 137\u003c\/p\u003e \u003cp\u003e6.10.3.2 Read Commands 137\u003c\/p\u003e \u003cp\u003e6.10.3.3 Write Commands 137\u003c\/p\u003e \u003cp\u003e6.10.4 Step 3: Activate the PDP Context 139\u003c\/p\u003e \u003cp\u003e6.10.5 Step 4: Allow\/Disallow Response Header for HTTP GET 140\u003c\/p\u003e \u003cp\u003e6.10.6 Step 5: Set HTTP(S) URL 141\u003c\/p\u003e \u003cp\u003e6.10.7 Step 6: Send HTTP(S) GET Request 141\u003c\/p\u003e \u003cp\u003e6.10.8 Step 7: Read HTTP(S) Response 142\u003c\/p\u003e \u003cp\u003e6.10.9 After Step 7: Deactivate the PDP Context 143\u003c\/p\u003e \u003cp\u003e6.10.10 Using Modem to Interact with ServerServer 143\u003c\/p\u003e \u003cp\u003e6.11 Bouncing Data Off EchoServer 145\u003c\/p\u003e \u003cp\u003e6.11.1 Before Step 1: Enable Unsolicited Response Codes (URCs) 145\u003c\/p\u003e \u003cp\u003e6.11.2 Step 4: Open a TCP Client Socket Connection 146\u003c\/p\u003e \u003cp\u003e6.11.3 Step 5: Send Mixed-case Text to EchoServer 146\u003c\/p\u003e \u003cp\u003e6.11.4 Step 6: Read (Uppercase) Response from EchoServer 148\u003c\/p\u003e \u003cp\u003e6.11.5 Step 7: Close TCP Client Socket Connection 151\u003c\/p\u003e \u003cp\u003e6.11.6 Step 8: Deactivate PDP Context 151\u003c\/p\u003e \u003cp\u003e6.12 No Problems Is Bad Luck 151\u003c\/p\u003e \u003cp\u003e\u003cb\u003e7 Cellular Connectivity Regions 153\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e7.1 How Geography, Topology, and Population Density Affect Connectivity 154\u003c\/p\u003e \u003cp\u003e7.1.1 Geography and Topology 154\u003c\/p\u003e \u003cp\u003e7.1.2 Population Density 154\u003c\/p\u003e \u003cp\u003e7.2 Region Categories 156\u003c\/p\u003e \u003cp\u003e7.2.1 Rural 156\u003c\/p\u003e \u003cp\u003e7.2.2 Rural Town 156\u003c\/p\u003e \u003cp\u003e7.2.3 Flat Farmland\/Flat Arid 156\u003c\/p\u003e \u003cp\u003e7.2.4 Mountainous 157\u003c\/p\u003e \u003cp\u003e7.2.5 Suburban 157\u003c\/p\u003e \u003cp\u003e7.2.6 Dense City 157\u003c\/p\u003e \u003cp\u003e7.2.7 Interstate Highway 157\u003c\/p\u003e \u003cp\u003e7.2.8 Uninhabited 158\u003c\/p\u003e \u003cp\u003e\u003cb\u003e8 Cellular Communication Modules (CCMs) 159\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e8.1 CCM Worldwide Market Share 162\u003c\/p\u003e \u003cp\u003e8.2 Frequency Band Usage 162\u003c\/p\u003e \u003cp\u003e8.3 Protocol Implementation 164\u003c\/p\u003e \u003cp\u003e8.4 Similarities and Differences Across CCMs 165\u003c\/p\u003e \u003cp\u003e8.4.1 Single or Dual AT Command Channels 165\u003c\/p\u003e \u003cp\u003e8.4.2 Different AT Command Sets 166\u003c\/p\u003e \u003cp\u003e8.4.3 Different Response Times for Similar or Identical Commands 167\u003c\/p\u003e \u003cp\u003e8.4.4 Differing Response Formats 167\u003c\/p\u003e \u003cp\u003e8.4.5 Differing Responses for Compound Statements 167\u003c\/p\u003e \u003cp\u003e8.4.6 Different Timing Requirements 168\u003c\/p\u003e \u003cp\u003e8.4.7 AT Commands Are Not Thread-safe 168\u003c\/p\u003e \u003cp\u003e8.4.8 Support for Different Protocols 168\u003c\/p\u003e \u003cp\u003e8.5 Consider the Whole CCM Family 169\u003c\/p\u003e \u003cp\u003e8.6 CCM Firmware Bugs 169\u003c\/p\u003e \u003cp\u003e8.7 CCMs Are a Lot Like Sensors: Imprecise and Not Entirely Reliable 170\u003c\/p\u003e \u003cp\u003e\u003cb\u003e9 AT Commands (A New Approach) 171\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e9.1 Purpose of AT Commands 171\u003c\/p\u003e \u003cp\u003e9.2 Problems of AT Commands 173\u003c\/p\u003e \u003cp\u003e9.2.1 Maximum Response Time for an AT Command 174\u003c\/p\u003e \u003cp\u003e9.3 Traditional Solution to Executing AT Commands and Extracting Responses 175\u003c\/p\u003e \u003cp\u003e9.4 Command Independent Processing (CIP) 179\u003c\/p\u003e \u003cp\u003e9.4.1 The Central Observation Underlying CIP 180\u003c\/p\u003e \u003cp\u003e9.4.2 Fundamental Elements of CIP 181\u003c\/p\u003e \u003cp\u003e9.4.2.1 AtParams 181\u003c\/p\u003e \u003cp\u003e9.4.2.2 AtCommand 181\u003c\/p\u003e \u003cp\u003e9.4.3 AT Commands in CIP 182\u003c\/p\u003e \u003cp\u003e9.4.3.1 Step 1: Define a Name for a Command 183\u003c\/p\u003e \u003cp\u003e9.4.3.2 Step 2: Create a Set of Parameters for Each Command 183\u003c\/p\u003e \u003cp\u003e9.4.3.3 Step 3: Store the Command Name and AtParams Object in a Map 184\u003c\/p\u003e \u003cp\u003e9.4.3.4 Step 4: Create a Command Object 185\u003c\/p\u003e \u003cp\u003e9.4.3.5 Step 5: Pass Arguments to the Command Object (if Necessary) 185\u003c\/p\u003e \u003cp\u003e9.4.3.6 Step 6: Perform the Command 185\u003c\/p\u003e \u003cp\u003e9.4.3.7 Step 7: Verify Success or Failure 186\u003c\/p\u003e \u003cp\u003e9.4.3.8 Step 8: Extract Response Information 187\u003c\/p\u003e \u003cp\u003e9.4.3.9 AT Commands with Parameters 192\u003c\/p\u003e \u003cp\u003e9.4.3.10 Timing Out 194\u003c\/p\u003e \u003cp\u003e9.4.4 Using CIP Across CCM Families and Across Manufacturers 196\u003c\/p\u003e \u003cp\u003e\u003cb\u003e10 CIP Design and Details 197\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e10.1 Pseudocode Conventions 198\u003c\/p\u003e \u003cp\u003e10.1.1 Identifier Names 198\u003c\/p\u003e \u003cp\u003e10.1.2 Angle Brackets 198\u003c\/p\u003e \u003cp\u003e10.1.3 Constructors 199\u003c\/p\u003e \u003cp\u003e10.1.4 Dot Operator 199\u003c\/p\u003e \u003cp\u003e10.1.5 Unified Modeling Language (UML) 199\u003c\/p\u003e \u003cp\u003e10.2 A Note on Objected-orientation and Threads 199\u003c\/p\u003e \u003cp\u003e10.3 AT Command Basics 200\u003c\/p\u003e \u003cp\u003e10.3.1 Echoing 200\u003c\/p\u003e \u003cp\u003e10.3.2 Enable\/Disable Response Codes 201\u003c\/p\u003e \u003cp\u003e10.3.3 Short or Long Response Codes 201\u003c\/p\u003e \u003cp\u003e10.3.4 Line Terminators 201\u003c\/p\u003e \u003cp\u003e10.3.5 Housekeeping 201\u003c\/p\u003e \u003cp\u003e10.4 Categories of Responses to AT Commands 202\u003c\/p\u003e \u003cp\u003e10.4.1 Ok_only 203\u003c\/p\u003e \u003cp\u003e10.4.2 Text_ok 203\u003c\/p\u003e \u003cp\u003e10.4.3 After_colon 203\u003c\/p\u003e \u003cp\u003e10.4.4 Ok_plus_after_colon 204\u003c\/p\u003e \u003cp\u003e10.4.5 MULTI_RECEIVE, MULTI_SEND, and Multi_after_colon 205\u003c\/p\u003e \u003cp\u003e10.5 Details of Command Independent Processing (CIP) 205\u003c\/p\u003e \u003cp\u003e10.5.1 AtStep Purpose 205\u003c\/p\u003e \u003cp\u003e10.5.2 AtStep Attributes 207\u003c\/p\u003e \u003cp\u003e10.6 A “Factory Method” for Creating AtCommand Objects 208\u003c\/p\u003e \u003cp\u003e10.7 Performing AT Commands 210\u003c\/p\u003e \u003cp\u003e10.7.1 Why AT Commands Fail 212\u003c\/p\u003e \u003cp\u003e10.7.2 Timing Out 212\u003c\/p\u003e \u003cp\u003e10.7.3 Details of the Execute Method 217\u003c\/p\u003e \u003cp\u003e10.7.4 Response Length 219\u003c\/p\u003e \u003cp\u003e10.7.5 Hardware Timing 220\u003c\/p\u003e \u003cp\u003e10.7.6 Combining Parameter Settings—Method Chaining 221\u003c\/p\u003e \u003cp\u003e10.7.7 Assessing Success and Multiple Tries 221\u003c\/p\u003e \u003cp\u003e10.7.8 Multi-line AT Commands—AtStep 223\u003c\/p\u003e \u003cp\u003e10.7.9 A Second Example with Regular Expressions 225\u003c\/p\u003e \u003cp\u003e10.7.10 Integrating AtStep into the Execute Methods 227\u003c\/p\u003e \u003cp\u003e10.8 AT Commands for Multiple Modems 228\u003c\/p\u003e \u003cp\u003e10.8.1 The Simplest Case 230\u003c\/p\u003e \u003cp\u003e10.8.2 Connectors 231\u003c\/p\u003e \u003cp\u003e10.8.2.1 All Connectors Are Also Threads 234\u003c\/p\u003e \u003cp\u003e10.8.2.2 Connectors Are Created Using a Factory Method 235\u003c\/p\u003e \u003cp\u003e10.8.2.3 Custom AT Commands Are Added in Static Blocks of Connectors 236\u003c\/p\u003e \u003cp\u003e10.8.2.4 Where to Override Methods or Parts of Methods 237\u003c\/p\u003e \u003cp\u003e10.8.3 An Asymmetrical Case—AtParamsNoOp 239\u003c\/p\u003e \u003cp\u003e\u003cb\u003e11 Geographical Coverage, Signal Strength, and Quality 243\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e11.1 Radio Access Technologies (RATs) 243\u003c\/p\u003e \u003cp\u003e11.2 Cellular Network Coverage Maps 245\u003c\/p\u003e \u003cp\u003e11.3 Signal Strength and Quality: RSSI, RSRP, RSRQ , SINR 246\u003c\/p\u003e \u003cp\u003e11.3.1 RSSI and RSRP 247\u003c\/p\u003e \u003cp\u003e11.3.2 Rsrq 249\u003c\/p\u003e \u003cp\u003e11.3.3 Sinr 249\u003c\/p\u003e \u003cp\u003e11.3.4 Using Modem to Report Signal Strength and Quality 250\u003c\/p\u003e \u003cp\u003e11.4 Antenna Selection and Performance 251\u003c\/p\u003e \u003cp\u003e11.4.1 Antenna Size 253\u003c\/p\u003e \u003cp\u003e11.4.2 Passive Versus Active Antennas 255\u003c\/p\u003e \u003cp\u003e11.4.3 Antenna Connectors 256\u003c\/p\u003e \u003cp\u003e11.4.4 Antenna Placement 257\u003c\/p\u003e \u003cp\u003e11.5 Antenna Testing 258\u003c\/p\u003e \u003cp\u003e11.6 Geography and Signal Strength Must Be Considered Together 259\u003c\/p\u003e \u003cp\u003e\u003cb\u003e12 Network Selection and Registration 261\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e12.1 Network Registration 261\u003c\/p\u003e \u003cp\u003e12.2 Radio Access Technology (RAT) 262\u003c\/p\u003e \u003cp\u003e12.3 Network Frequency Band Selection 264\u003c\/p\u003e \u003cp\u003e12.4 PLMN Selection 266\u003c\/p\u003e \u003cp\u003e12.4.1 Manual PLMN Selection 267\u003c\/p\u003e \u003cp\u003e12.4.2 Automatic PLMN Selection 267\u003c\/p\u003e \u003cp\u003e12.5 How to Create Your Own User Preference List 268\u003c\/p\u003e \u003cp\u003e12.5.1 Reading the UPL and OPL 269\u003c\/p\u003e \u003cp\u003e12.5.2 Modifying the UPL 271\u003c\/p\u003e \u003cp\u003e12.6 Once a PLMN Is Auto-selected, Is It Always Selected? 273\u003c\/p\u003e \u003cp\u003e12.7 Forcing the CCM Back to the PLMN Preference List 274\u003c\/p\u003e \u003cp\u003e12.8 A Mysterious PLMN Selection Behavior 275\u003c\/p\u003e \u003cp\u003e12.9 Troubleshooting Registration Problems 276\u003c\/p\u003e \u003cp\u003e12.9.1 New Modem, Never Registered 276\u003c\/p\u003e \u003cp\u003e12.9.2 Old Modem, Previously Registered 278\u003c\/p\u003e \u003cp\u003e12.10 Anomalous Behavior 278\u003c\/p\u003e \u003cp\u003e\u003cb\u003e13 Communication Protocols TCP, UDP, and PPP 281\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e13.1 Internet Protocol 281\u003c\/p\u003e \u003cp\u003e13.2 Transmission Control Protocol (TCP) 283\u003c\/p\u003e \u003cp\u003e13.3 Considering Data Consumption 285\u003c\/p\u003e \u003cp\u003e13.4 User Datagram Protocol (UDP) 285\u003c\/p\u003e \u003cp\u003e13.5 TCP Pros and Cons 287\u003c\/p\u003e \u003cp\u003e13.6 Point-to-point Protocol (PPP) 290\u003c\/p\u003e \u003cp\u003e13.7 AT Commands for Data Transfer Are Completely Unstandardized 292\u003c\/p\u003e \u003cp\u003e13.8 PPP on Linux 292\u003c\/p\u003e \u003cp\u003e13.8.1 Debugging PPP 295\u003c\/p\u003e \u003cp\u003e13.9 Alternatives to PPP 298\u003c\/p\u003e \u003cp\u003e\u003cb\u003e14 Thin Air 301\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e14.1 A Most Dramatic Case 302\u003c\/p\u003e \u003cp\u003e14.1.1 Watching the Server 304\u003c\/p\u003e \u003cp\u003e14.1.2 Packets Not Getting to the Server 305\u003c\/p\u003e \u003cp\u003e14.2 What Was Going On? Thin Air 306\u003c\/p\u003e \u003cp\u003e14.3 Why Did Thin Air Persist Over Hundreds of Miles? 308\u003c\/p\u003e \u003cp\u003e14.4 How to Detect Thin Air 312\u003c\/p\u003e \u003cp\u003e14.5 What to Do About Thin Air 313\u003c\/p\u003e \u003cp\u003e14.6 Minimizing the Size of a Thin Air Region 313\u003c\/p\u003e \u003cp\u003e14.7 A Hybrid UDP Protocol for Detecting Thin Air 314\u003c\/p\u003e \u003cp\u003e14.8 Reducing (or Eliminating) Thin Air by PLMN or Band Selection 315\u003c\/p\u003e \u003cp\u003e14.8.1 The Most Direct Approach 316\u003c\/p\u003e \u003cp\u003e14.9 Putting the Hybrid Protocol to Second Use 322\u003c\/p\u003e \u003cp\u003e\u003cb\u003e15 Time and Location (GNSS) 325\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e15.1 Clarifying Terminology 325\u003c\/p\u003e \u003cp\u003e15.2 Time 326\u003c\/p\u003e \u003cp\u003e15.3 Location 328\u003c\/p\u003e \u003cp\u003e15.4 Obtaining Time Information 331\u003c\/p\u003e \u003cp\u003e15.4.1 Real-time Clock 331\u003c\/p\u003e \u003cp\u003e15.4.2 Cellular Modem 332\u003c\/p\u003e \u003cp\u003e15.4.2.1 Additional Configuration 333\u003c\/p\u003e \u003cp\u003e15.4.2.2 Local Time or UTC 333\u003c\/p\u003e \u003cp\u003e15.4.2.3 Daylight Saving Time 335\u003c\/p\u003e \u003cp\u003e15.4.2.4 Using Modem to Read the Clock 336\u003c\/p\u003e \u003cp\u003e15.4.3 Get Time from a GNSS Receiver 336\u003c\/p\u003e \u003cp\u003e15.4.4 Get Time from a Server 337\u003c\/p\u003e \u003cp\u003e15.5 Sources of Location Information 337\u003c\/p\u003e \u003cp\u003e15.6 Pros and Cons of CCM’s GNSS Receiver Versus Stand-alone GNSS Receiver 338\u003c\/p\u003e \u003cp\u003e15.7 Cold Start, Warm Start, Hot Start 339\u003c\/p\u003e \u003cp\u003e15.8 Assisted GPS 340\u003c\/p\u003e \u003cp\u003e15.9 GNSS Antenna Selection 340\u003c\/p\u003e \u003cp\u003e15.10 GNSS Receiver Placement 341\u003c\/p\u003e \u003cp\u003e15.11 GNSS Accuracy and Precision 342\u003c\/p\u003e \u003cp\u003e15.11.1 Improving Accuracy 345\u003c\/p\u003e \u003cp\u003e15.12 NMEA Sentences 346\u003c\/p\u003e \u003cp\u003e15.12.1 Using Modem to Read GNSS Sentences 347\u003c\/p\u003e \u003cp\u003e15.13 Three Ways to Obtain Location Information 348\u003c\/p\u003e \u003cp\u003e15.13.1 Simple AT Command Request for Location 348\u003c\/p\u003e \u003cp\u003e15.13.2 Read Streaming Data from gpsd 350\u003c\/p\u003e \u003cp\u003e15.13.2.1 For a Stand-alone GNSS Receiver 350\u003c\/p\u003e \u003cp\u003e15.13.2.2 For a CCM’s GNSS Receiver 351\u003c\/p\u003e \u003cp\u003e15.13.3 Read Streaming Data Directly from CCM’s GNSS receiver 355\u003c\/p\u003e \u003cp\u003e15.14 Understanding gpsd JSON Output 356\u003c\/p\u003e \u003cp\u003e15.15 Writing Software to Capture and Process gpsd Output 358\u003c\/p\u003e \u003cp\u003e15.16 GNSS Data Streamed from a CCM 359\u003c\/p\u003e \u003cp\u003e15.17 Nmea 0183 359\u003c\/p\u003e \u003cp\u003e15.17.1 Talker Sentence Format 360\u003c\/p\u003e \u003cp\u003e15.17.1.1 GSA Sentence Format 361\u003c\/p\u003e \u003cp\u003e15.17.1.2 RMC Sentence Format 362\u003c\/p\u003e \u003cp\u003e15.17.1.3 GSV Sentence Format 362\u003c\/p\u003e \u003cp\u003e15.17.2 NMEA Checksums 364\u003c\/p\u003e \u003cp\u003e15.17.3 CCM GNSS Receivers Only Stream Some NMEA Sentences 365\u003c\/p\u003e \u003cp\u003e15.18 Some Additional gpsd Utilities 366\u003c\/p\u003e \u003cp\u003e\u003cb\u003e16 Establishing and Maintaining a Cellular Connection 369\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e16.1 Modem Selection 370\u003c\/p\u003e \u003cp\u003e16.2 Foundational Tasks 371\u003c\/p\u003e \u003cp\u003e16.2.1 State 1: Detecting CCM 373\u003c\/p\u003e \u003cp\u003e16.2.1.1 Using Modem to Detect a CCM 373\u003c\/p\u003e \u003cp\u003e16.2.2 State 2a: Initializing CMM 374\u003c\/p\u003e \u003cp\u003e16.2.2.1 Viewing Modem’s Initializations 374\u003c\/p\u003e \u003cp\u003e16.2.3 State 2b: Waiting to Retry 376\u003c\/p\u003e \u003cp\u003e16.2.4 State 3: Set Mobile Network Operator 376\u003c\/p\u003e \u003cp\u003e16.2.5 State 4: Checking Registration Status 376\u003c\/p\u003e \u003cp\u003e16.2.5.1 Using Modem to Check Registration Status 377\u003c\/p\u003e \u003cp\u003e16.2.6 State 5: Connecting 378\u003c\/p\u003e \u003cp\u003e16.2.7 State 6: Manage Connection 378\u003c\/p\u003e \u003cp\u003e\u003cb\u003e17 Sending and Receiving Text Messages (SMS) 379\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e17.1 Why Send\/Receive Text Messages? 380\u003c\/p\u003e \u003cp\u003e17.1.1 Need to “Push” Information to an IoT Device 380\u003c\/p\u003e \u003cp\u003e17.1.2 Serverless IoT Devices That Interact with End-users 383\u003c\/p\u003e \u003cp\u003e17.2 Cost of Text Messaging via Cellular Modem 383\u003c\/p\u003e \u003cp\u003e17.3 Application-to-person (A2P) Messaging Is Often Regulated 384\u003c\/p\u003e \u003cp\u003e17.4 Overview of Sending\/Receiving Text Messages 385\u003c\/p\u003e \u003cp\u003e17.5 Sending Text Messages 386\u003c\/p\u003e \u003cp\u003e17.5.1 Set the Message Format 386\u003c\/p\u003e \u003cp\u003e17.5.2 Set Parameters for Sending 386\u003c\/p\u003e \u003cp\u003e17.5.3 Specify the Destination Phone Number and the Text to Send 389\u003c\/p\u003e \u003cp\u003e17.5.4 What If Sending an SM Fails? 390\u003c\/p\u003e \u003cp\u003e17.5.5 Using Modem to Send a Text Message 390\u003c\/p\u003e \u003cp\u003e17.6 Receiving and Reading a Text Message 391\u003c\/p\u003e \u003cp\u003e17.6.1 Configure the CCM 392\u003c\/p\u003e \u003cp\u003e17.6.1.1 Set the Message Format 392\u003c\/p\u003e \u003cp\u003e17.6.1.2 Configure SMS Storage 392\u003c\/p\u003e \u003cp\u003e17.6.1.3 Check for a Received Text Message 394\u003c\/p\u003e \u003cp\u003e17.6.1.4 Using Modem to List Text Messages 395\u003c\/p\u003e \u003cp\u003e17.6.1.5 Delete a Text Message 396\u003c\/p\u003e \u003cp\u003e17.6.1.6 Using Modem to Delete a Text Message 396\u003c\/p\u003e \u003cp\u003e17.7 SMS with Constrained Devices 397\u003c\/p\u003e \u003cp\u003e17.7.1 Set the Message Format 397\u003c\/p\u003e \u003cp\u003e17.7.2 Set Parameters for Writing to Mem- 2 397\u003c\/p\u003e \u003cp\u003e17.7.3 Specify the Destination Phone Number and Text to Store 397\u003c\/p\u003e \u003cp\u003e17.7.4 Send a Text Message Already Stored in Mem- 2 398\u003c\/p\u003e \u003cp\u003e17.7.5 Verifying a Text Message Was Sent from Mem- 2 399\u003c\/p\u003e \u003cp\u003e17.8 Integrating SMS into CIP 400\u003c\/p\u003e \u003cp\u003e\u003cb\u003e18 Power Saving Modes and Techniques 403\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e18.1 What Are Low-power CCMs (LP-CCMs) 404\u003c\/p\u003e \u003cp\u003e18.2 Plenty of Power, Most of the Time 405\u003c\/p\u003e \u003cp\u003e18.3 Low-power IoT Devices 407\u003c\/p\u003e \u003cp\u003e18.3.1 Microcontroller Energy Consumption 407\u003c\/p\u003e \u003cp\u003e18.3.2 Temperature Sensor Energy Consumption 408\u003c\/p\u003e \u003cp\u003e18.4 Battery Capacity 408\u003c\/p\u003e \u003cp\u003e18.5 Transmitter Power 409\u003c\/p\u003e \u003cp\u003e18.6 Legacy (GSM) Power Consumption 410\u003c\/p\u003e \u003cp\u003e18.7 Cellular Modem Energy Consumption 413\u003c\/p\u003e \u003cp\u003e18.7.1 Additional Energy Consumption 414\u003c\/p\u003e \u003cp\u003e18.8 Network Registration States—RRC_CONNECTED and Rrc_idle 414\u003c\/p\u003e \u003cp\u003e18.8.1 RRC_CONNECTED (Without DRX) 416\u003c\/p\u003e \u003cp\u003e18.8.1.1 Scenario 1—Sending a Location Packet 417\u003c\/p\u003e \u003cp\u003e18.8.1.2 Scenario 2—Fetching an Over-the-air Update 418\u003c\/p\u003e \u003cp\u003e18.8.2 RRC_IDLE (Without DRX) 420\u003c\/p\u003e \u003cp\u003e18.8.3 Discontinuous Reception (DRX) 422\u003c\/p\u003e \u003cp\u003e18.8.3.1 Discontinuous Reception in RRC_IDLE (iDRX) 423\u003c\/p\u003e \u003cp\u003e18.8.3.2 Discontinuous Reception in RRC_CONNECTED (cDRX) 424\u003c\/p\u003e \u003cp\u003e18.8.4 Registration Characteristics Summary 426\u003c\/p\u003e \u003cp\u003e18.9 Latency 427\u003c\/p\u003e \u003cp\u003e18.10 Using Low-power CCM—Cat M and NB-IoT and Cat 1 bis 429\u003c\/p\u003e \u003cp\u003e18.11 Power Saving Mode (PSM) 431\u003c\/p\u003e \u003cp\u003e18.11.1 How to Enable PSM 434\u003c\/p\u003e \u003cp\u003e18.11.1.1 Using Modem to Enter PSM 436\u003c\/p\u003e \u003cp\u003e18.11.2 Verifying PSM and Possible Problems or Surprises 437\u003c\/p\u003e \u003cp\u003e18.11.2.1 Using Modem to Check PSM Status 439\u003c\/p\u003e \u003cp\u003e18.11.3 Actual PSM Cycle Length 439\u003c\/p\u003e \u003cp\u003e18.11.4 Exiting PSM 440\u003c\/p\u003e \u003cp\u003e18.11.4.1 Using Modem to Exit PSM 441\u003c\/p\u003e \u003cp\u003e18.11.5 Sending Data from PSM Inactive 442\u003c\/p\u003e \u003cp\u003e18.11.6 PSM Effectiveness 442\u003c\/p\u003e \u003cp\u003e18.11.7 Integrating PSM into CIP 443\u003c\/p\u003e \u003cp\u003e18.12 Extended Discontinuous Reception (eDRX) 445\u003c\/p\u003e \u003cp\u003e18.12.1 How to Enable eDRX 447\u003c\/p\u003e \u003cp\u003e18.12.1.1 Using Modem to Enable eDRX 448\u003c\/p\u003e \u003cp\u003e18.12.2 Verifying eDRX Cycle Length 449\u003c\/p\u003e \u003cp\u003e18.12.2.1 Using Modem to Check eDRX Status 450\u003c\/p\u003e \u003cp\u003e18.12.3 Disabling eDRX 451\u003c\/p\u003e \u003cp\u003e18.12.3.1 Using Modem to Disable eDRX 451\u003c\/p\u003e \u003cp\u003e18.12.4 Integrating eDRX into CIP 451\u003c\/p\u003e \u003cp\u003e18.13 When to Use PSM, eDRX, or Both 454\u003c\/p\u003e \u003cp\u003e18.14 Don’t Trust the Numbers 454\u003c\/p\u003e \u003cp\u003e\u003cb\u003eA Unified Modeling Language (UML) Primer 455\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eA. 1 Assumptions 455\u003c\/p\u003e \u003cp\u003eA. 2 UML Syntax 456\u003c\/p\u003e \u003cp\u003eA. 3 Visibility (Private, Protected, Public) 457\u003c\/p\u003e \u003cp\u003eA. 4 Attribute\/Parameter\/Method Names and Types 457\u003c\/p\u003e \u003cp\u003eA. 5 Class Attributes and Methods 458\u003c\/p\u003e \u003cp\u003eA. 6 Aggregation 459\u003c\/p\u003e \u003cp\u003eA. 7 Multiplicities 459\u003c\/p\u003e \u003cp\u003eA. 8 Inheritance 460\u003c\/p\u003e \u003cp\u003eA. 9 Interfaces 460\u003c\/p\u003e \u003cp\u003eA. 10 Hidden Attributes 461\u003c\/p\u003e \u003cp\u003eA. 11 Layout 462\u003c\/p\u003e \u003cp\u003eA. 12 State Diagrams 462\u003c\/p\u003e \u003cp\u003e\u003cb\u003eB 3GPP AT Commands Used in This Book 465\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eC The Modem Utility 469\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eC. 1 Invoking the Modem Program 470\u003c\/p\u003e \u003cp\u003eC. 2 Flags 470\u003c\/p\u003e \u003cp\u003eC. 3 Commands 471\u003c\/p\u003e \u003cp\u003eGlossary 479\u003c\/p\u003e \u003cp\u003eClosing Notes 485\u003c\/p\u003e \u003cp\u003eIndex 487\u003c\/p\u003e \u003cp\u003e \u003c\/p\u003e \u003cp\u003e \u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Electronics \u0026amp; communications engineering [\u003ca title=\"See our other books on Electronics \u0026amp; communications engineering\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Electronics%20\u0026amp;%20communications%20engineering%20%5BTJ%5D%22\"\u003eTJ\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wiley","offers":[{"title":"Brand New","offer_id":52501370601752,"sku":"9781394329656","price":66.39,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9781394329656.jpg?v=1786234196","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/cellular-iot-a-practical-guide-for-software-developers-electrical-engineers-and-project-managers-hardback-9781394329656","provider":"Freshly Printed Books","version":"1.0","type":"link"}