SimpleLink CC3120/CC3220 Host Driver  Version 2.0.1.22
Simplifies the implementation of Internet connectivity
Device

Controls the behaviour of the CC31xx/CC32xx device (start/stop, events masking and obtaining specific device status) More...

Functions

_i16 sl_Start (const void *pIfHdl, _i8 *pDevName, const P_INIT_CALLBACK pInitCallBack)
 Start the SimpleLink device. More...
 
_i16 sl_Stop (const _u16 Timeout)
 Stop the SimpleLink device. More...
 
_i16 sl_DeviceSet (const _u8 DeviceSetId, const _u8 Option, const _u16 ConfigLen, const _u8 *pValues)
 Setting device configurations. More...
 
_i16 sl_DeviceGet (const _u8 DeviceGetId, _u8 *pOption, _u16 *pConfigLen, _u8 *pValues)
 Internal function for getting device configurations. More...
 
_i16 sl_DeviceEventMaskSet (const _u8 EventClass, const _u32 Mask)
 Set asynchronous event mask. More...
 
_i16 sl_DeviceEventMaskGet (const _u8 EventClass, _u32 *pMask)
 Get current event mask of the device. More...
 
void * sl_Task (void *pEntry)
 The SimpleLink task entry. More...
 
_i16 sl_DeviceUartSetMode (const SlDeviceUartIfParams_t *pUartParams)
 Setting the internal uart mode. More...
 

Typedefs

typedef struct SlDeviceFatalNoCmdAck_t SlDeviceFatalCmdTimeout_t
 
typedef void(* P_INIT_CALLBACK) (_u32 Status, SlDeviceInitInfo_t *DeviceInitInfo)
 

Enumerations

enum  SlDeviceEventId_e {
  SL_DEVICE_EVENT_FATAL_DEVICE_ABORT = 1,
  SL_DEVICE_EVENT_FATAL_DRIVER_ABORT,
  SL_DEVICE_EVENT_FATAL_SYNC_LOSS,
  SL_DEVICE_EVENT_FATAL_NO_CMD_ACK,
  SL_DEVICE_EVENT_FATAL_CMD_TIMEOUT,
  SL_DEVICE_EVENT_RESET_REQUEST,
  SL_DEVICE_EVENT_ERROR,
  SL_DEVICE_EVENT_MAX
}
 
enum  SlDeviceSource_e {
  SL_DEVICE_SOURCE_OTHER,
  SL_DEVICE_SOURCE_WLAN,
  SL_DEVICE_SOURCE_NETCFG,
  SL_DEVICE_SOURCE_NETAPP,
  SL_DEVICE_SOURCE_SECURITY,
  SL_DEVICE_SOURCE_LAST = 0xFF
}
 
enum  SlDeviceResetRequestCaller_e {
  SL_DEVICE_RESET_REQUEST_CALLER_PROVISIONING,
  SL_DEVICE_RESET_REQUEST_CALLER_PROVISIONING_EXTERNAL_CONFIGURATION,
  SL_DEVICE_RESET_REQUEST_NUM_OF_CALLERS
}
 

Detailed Description

Controls the behaviour of the CC31xx/CC32xx device (start/stop, events masking and obtaining specific device status)

Function Documentation

§ sl_DeviceEventMaskGet()

_i16 sl_DeviceEventMaskGet ( const _u8  EventClass,
_u32 *  pMask 
)

Get current event mask of the device.

Return the events bit mask from the device. In case event is masked, the device will not send that event.

Parameters
[in]EventClassThe classification groups that the mask is referred to. Need to be one of the following:
  • SL_DEVICE_EVENT_CLASS_GLOBAL
  • SL_DEVICE_EVENT_CLASS_DEVICE
  • SL_DEVICE_EVENT_CLASS_WLAN
  • SL_DEVICE_EVENT_CLASS_BSD
  • SL_DEVICE_EVENT_CLASS_NETAPP
  • SL_DEVICE_EVENT_CLASS_NETCFG
  • SL_DEVICE_EVENT_CLASS_FS
[out]pMaskPointer to mask bitmap where the value should be stored. Bitmasks are the same as in sl_DeviceEventMaskSet
Returns
Zero on success, or a negative value if an error occurred
See also
sl_DeviceEventMaskSet
Note
Belongs to ext_api
Warning
Example
  • Getting an event mask for WLAN class:
    _u32 maskWlan;
    sl_DeviceEventMaskGet(SL_DEVICE_EVENT_CLASS_WLAN,&maskWlan);

Definition at line 449 of file device.c.

450 {
451  _SlEventMaskGetMsg_u Msg;
452 
453  /* verify that this api is allowed. if not allowed then
454  ignore the API execution and return immediately with an error */
455  VERIFY_API_ALLOWED(SL_OPCODE_SILO_DEVICE);
456 
457  Msg.Cmd.Group = EventClass;
458 
459  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlEventMaskGetCmdCtrl, &Msg, NULL));
460 
461  *pMask = Msg.Rsp.Mask;
462 
463  return SL_RET_CODE_OK;
464 }

§ sl_DeviceEventMaskSet()

_i16 sl_DeviceEventMaskSet ( const _u8  EventClass,
const _u32  Mask 
)

Set asynchronous event mask.

Mask asynchronous events from the device.
Masked events do not generate asynchronous messages from the device.
By default - all events are active

Parameters
[in]EventClassThe classification groups that the mask is referred to. Need to be one of the following:
  • SL_DEVICE_EVENT_CLASS_DEVICE
  • SL_DEVICE_EVENT_CLASS_WLAN
  • SL_DEVICE_EVENT_CLASS_BSD
  • SL_DEVICE_EVENT_CLASS_NETAPP
  • SL_DEVICE_EVENT_CLASS_NETCFG
  • SL_DEVICE_EVENT_CLASS_FS
[in]MaskEvent Mask bitmap. Valid mask are (per group):
  • SL_DEVICE_EVENT_CLASS_WLAN user events
    • SL_WLAN_EVENT_CONNECT
    • SL_WLAN_EVENT_P2P_CONNECT
    • SL_WLAN_EVENT_DISCONNECT
    • SL_WLAN_EVENT_P2P_DISCONNECT
    • SL_WLAN_EVENT_STA_ADDED
    • SL_WLAN_EVENT_STA_REMOVED
    • SL_WLAN_EVENT_P2P_CLIENT_ADDED
    • SL_WLAN_EVENT_P2P_CLIENT_REMOVED
    • SL_WLAN_EVENT_P2P_DEVFOUND
    • SL_WLAN_EVENT_P2P_REQUEST
    • SL_WLAN_EVENT_P2P_CONNECTFAIL
    • SL_WLAN_EVENT_PROVISIONING_STATUS
    • SL_WLAN_EVENT_PROVISIONING_PROFILE_ADDED
    • SL_WLAN_EVENT_RXFILTER
  • SL_DEVICE_EVENT_CLASS_DEVICE user events
    • SL_DEVICE_EVENT_ERROR
  • SL_DEVICE_EVENT_CLASS_BSD user events
    • SL_SOCKET_TX_FAILED_EVENT
    • SL_SOCKET_ASYNC_EVENT
  • SL_DEVICE_EVENT_CLASS_NETAPP user events
    • SL_NETAPP_EVENT_IPV4_ACQUIRED
    • SL_NETAPP_EVENT_IPV6_ACQUIRED
    • SL_NETAPP_EVENT_DHCPV4_LEASED
    • SL_NETAPP_EVENT_DHCPV4_RELEASED
    • SL_NETAPP_EVENT_IP_COLLISION
    • SL_NETAPP_EVENT_IPV4_LOST
    • SL_NETAPP_EVENT_DHCP_IPV4_ACQUIRE_TIMEOUT
    • SL_NETAPP_EVENT_IPV6_LOST
Returns
Zero on success, or a negative value if an error occurred
Persistent System Persistent
See also
sl_DeviceEventMaskGet
Note
Belongs to ext_api
Warning
Example
  • Masking connection/disconnection async events from WLAN class:
    sl_DeviceEventMaskSet(SL_DEVICE_EVENT_CLASS_WLAN, (SL_DEVICE_EVENT_BIT(SL_WLAN_EVENT_CONNECT) | SL_DEVICE_EVENT_BIT(SL_WLAN_EVENT_DISCONNECT) ) );

Definition at line 411 of file device.c.

412 {
413  _SlEventMaskSetMsg_u Msg;
414 
415  /* verify that this api is allowed. if not allowed then
416  ignore the API execution and return immediately with an error */
417  VERIFY_API_ALLOWED(SL_OPCODE_SILO_DEVICE);
418 
419  Msg.Cmd.Group = EventClass;
420  Msg.Cmd.Mask = Mask;
421 
422  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlEventMaskSetCmdCtrl, &Msg, NULL));
423 
424  return (_i16)Msg.Rsp.status;
425 }

§ sl_DeviceGet()

_i16 sl_DeviceGet ( const _u8  DeviceGetId,
_u8 *  pOption,
_u16 *  pConfigLen,
_u8 *  pValues 
)

Internal function for getting device configurations.

Parameters
[in]DeviceGetIdconfiguration id:
  • SL_DEVICE_STATUS
  • SL_DEVICE_GENERAL
  • SL_DEVICE_IOT
[out]pOptionGet configurations option:
  • SL_DEVICE_STATUS:
    • SL_DEVICE_EVENT_CLASS_DEVICE
    • SL_DEVICE_EVENT_CLASS_WLAN
    • SL_DEVICE_EVENT_CLASS_BSD
    • SL_DEVICE_EVENT_CLASS_NETAPP
    • SL_DEVICE_EVENT_CLASS_NETCFG
    • SL_DEVICE_EVENT_CLASS_FS
  • SL_DEVICE_GENERAL:
    • SL_DEVICE_GENERAL_VERSION
    • SL_DEVICE_GENERAL_DATE_TIME
    • SL_DEVICE_GENERAL_PERSISTENT
  • SL_DEVICE_IOT:
    • SL_DEVICE_IOT_UDID
[out]pConfigLenThe length of the allocated memory as input, when the function complete, the value of this parameter would be the len that actually read from the device.
If the device return length that is longer from the input value, the function will cut the end of the returned structure and will return SL_ESMALLBUF
[out]pValuesGet requested configurations values
Returns
Zero on success, or a negative value if an error occurred
See also
Note
Warning
Examples
  • Getting WLAN class status (status is always cleared on read):
    _u32 statusWlan;
    _u8 pConfigOpt;
    _u16 pConfigLen;
    pConfigOpt = SL_DEVICE_EVENT_CLASS_WLAN;
    pConfigLen = sizeof(_u32);
    sl_DeviceGet(SL_DEVICE_STATUS,&pConfigOpt,&pConfigLen,(_u8 *)(&statusWlan));
    if (SL_DEVICE_STATUS_WLAN_STA_CONNECTED & statusWlan )
    {
    printf("Device is connected\n");
    }
    if (SL_DEVICE_EVENT_DROPPED_WLAN_RX_FILTERS & statusWlan )
    {
    printf("RX filer event dropped\n");
    }

  • Getting version:
    pConfigLen = sizeof(ver);
    pConfigOpt = SL_DEVICE_GENERAL_VERSION;
    sl_DeviceGet(SL_DEVICE_GENERAL,&pConfigOpt,&pConfigLen,(_u8 *)(&ver));
    printf("CHIP %d\nMAC 31.%d.%d.%d.%d\nPHY %d.%d.%d.%d\nNWP %d.%d.%d.%d\nROM %d\nHOST %d.%d.%d.%d\n",
    ver.ChipId,
    ver.FwVersion[0],ver.FwVersion[1],
    ver.FwVersion[2],ver.FwVersion[3],
    ver.PhyVersion[0],ver.PhyVersion[1],
    ver.PhyVersion[2],ver.PhyVersion[3],
    ver.NwpVersion[0],ver.NwpVersion[1],ver.NwpVersion[2],ver.NwpVersion[3],
    ver.RomVersion,
    SL_MAJOR_VERSION_NUM,SL_MINOR_VERSION_NUM,SL_VERSION_NUM,SL_SUB_VERSION_NUM);

  • Getting Device time and date:
    SlDateTime_t dateTime = {0};
    _i16 configLen = sizeof(SlDateTime_t);
    _i8 configOpt = SL_DEVICE_GENERAL_DATE_TIME;
    sl_DeviceGet(SL_DEVICE_GENERAL,&configOpt, &configLen,(_u8 *)(&dateTime));
    printf("Day %d,Mon %d,Year %d,Hour %,Min %d,Sec %d\n",dateTime.tm_day,dateTime.tm_mon,dateTime.tm_year,
    dateTime.tm_hour,dateTime.tm_min,dateTime.tm_sec);
  • Getting persistency system configuration:
    _i16 configLen = sizeof(_u8);
    _i8 configOpt = SL_DEVICE_GENERAL_PERSISTENT;
    sl_DeviceGet(SL_DEVICE_GENERAL,&configOpt, &configLen,&persistent);

Definition at line 490 of file device.c.

491 {
492  _SlDeviceMsgGet_u Msg;
493  _SlCmdExt_t CmdExt;
494 
495  /* verify that this api is allowed. if not allowed then
496  ignore the API execution and return immediately with an error */
497  VERIFY_API_ALLOWED(SL_OPCODE_SILO_DEVICE);
498 
499  if (*pConfigLen == 0)
500  {
501  return SL_EZEROLEN;
502  }
503 
504  if( pOption )
505  {
506 
507  _SlDrvResetCmdExt(&CmdExt);
508  CmdExt.RxPayloadLen = (_i16)*pConfigLen;
509  CmdExt.pRxPayload = (_u8 *)pValues;
510 
511  Msg.Cmd.DeviceSetId = DeviceGetId;
512 
513  Msg.Cmd.Option = (_u16)*pOption;
514 
515  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlDeviceGetCmdCtrl, &Msg, &CmdExt));
516 
517  if( pOption )
518  {
519  *pOption = (_u8)Msg.Rsp.Option;
520  }
521 
522  if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
523  {
524  *pConfigLen = (_u16)CmdExt.RxPayloadLen;
525 
526  return SL_ESMALLBUF;
527  }
528  else
529  {
530  *pConfigLen = (_u16)CmdExt.ActualRxPayloadLen;
531  }
532 
533  return (_i16)Msg.Rsp.Status;
534  }
535  else
536  {
537  return SL_RET_CODE_INVALID_INPUT;
538  }
539 }

§ sl_DeviceSet()

_i16 sl_DeviceSet ( const _u8  DeviceSetId,
const _u8  Option,
const _u16  ConfigLen,
const _u8 *  pValues 
)

Setting device configurations.

Parameters
[in]DeviceSetIdconfiguration id:
  • SL_DEVICE_GENERAL
[in]Optionconfigurations option:
  • SL_DEVICE_GENERAL_DATE_TIME
  • SL_DEVICE_GENERAL_PERSISTENT
[in]ConfigLenconfigurations len
[in]pValuesconfigurations values
Returns
Zero on success, or a negative value if an error occurred
Persistent
SL_DEVICE_GENERAL_DATE_TIME - Non-Persistent (Kept during hibernate) SL_DEVICE_GENERAL_PERSISTENT - Persistent
See also
Note
Warning
Examples:
  • Setting device time and date example:
    SlDateTime_t dateTime= {0};
    dateTime.tm_day = (_u32)23; // Day of month (DD format) range 1-31
    dateTime.tm_mon = (_u32)6; // Month (MM format) in the range of 1-12
    dateTime.tm_year = (_u32)2014; // Year (YYYY format)
    dateTime.tm_hour = (_u32)17; // Hours in the range of 0-23
    dateTime.tm_min = (_u32)55; // Minutes in the range of 0-59
    dateTime.tm_sec = (_u32)22; // Seconds in the range of 0-59
    sl_DeviceSet(SL_DEVICE_GENERAL,
    SL_DEVICE_GENERAL_DATE_TIME,
    sizeof(SlDateTime_t),
    (_u8 *)(&dateTime));

  • Setting system persistent configuration:
    Sets the default system-wide configuration persistence mode. In case true, all APIs that follow 'system configured' persistence (see persistence attribute noted per API) shall maintain the configured settings. In case false, all calls to APIs that follow 'system configured' persistence shall be volatile. Configuration should revert to default after reset or power recycle
    _u8 persistent = 1;
    sl_DeviceSet(SL_DEVICE_GENERAL,
    SL_DEVICE_GENERAL_PERSISTENT,
    sizeof(_u8),
    (_u8 *)(&persistent));

Definition at line 562 of file device.c.

563 {
564  _SlDeviceMsgSet_u Msg;
565  _SlCmdExt_t CmdExt;
566 
567  /* verify that this api is allowed. if not allowed then
568  ignore the API execution and return immediately with an error */
569  VERIFY_API_ALLOWED(SL_OPCODE_SILO_DEVICE);
570 
571  _SlDrvResetCmdExt(&CmdExt);
572 
573  CmdExt.TxPayload1Len = (ConfigLen+3) & (~3);
574  CmdExt.pTxPayload1 = (_u8 *)pValues;
575 
576  Msg.Cmd.DeviceSetId = DeviceSetId;
577  Msg.Cmd.ConfigLen = ConfigLen;
578  Msg.Cmd.Option = Option;
579 
580  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlDeviceSetCmdCtrl, &Msg, &CmdExt));
581 
582  return (_i16)Msg.Rsp.status;
583 }

§ sl_DeviceUartSetMode()

_i16 sl_DeviceUartSetMode ( const SlDeviceUartIfParams_t pUartParams)

Setting the internal uart mode.

Parameters
[in]pUartParamsPointer to the uart configuration parameter set:
  • baudrate - up to 711 Kbps
  • flow control - enable/disable
  • comm port - the comm port number
Returns
On success zero is returned, otherwise - Failed.
See also
Note
Belongs to basic_api
Warning
This function must consider the host uart capability

Definition at line 737 of file device.c.

738 {
739  _SlUartSetModeMsg_u Msg;
740  _u32 magicCode = (_u32)0xFFFFFFFF;
741 
742  Msg.Cmd.BaudRate = pUartParams->BaudRate;
743  Msg.Cmd.FlowControlEnable = pUartParams->FlowControlEnable;
744 
745 
746  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlUartSetModeCmdCtrl, &Msg, NULL));
747 
748  /* cmd response OK, we can continue with the handshake */
749  if (SL_RET_CODE_OK == Msg.Rsp.status)
750  {
751  sl_IfMaskIntHdlr();
752 
753  /* Close the comm port */
754  sl_IfClose(g_pCB->FD);
755 
756  /* Re-open the comm port */
757  sl_IfOpen((void * )pUartParams, SL_IF_UART_REOPEN_FLAGS);
758 
759  sl_IfUnMaskIntHdlr();
760 
761  /* send the magic code and wait for the response */
762  sl_IfWrite(g_pCB->FD, (_u8* )&magicCode, 4);
763 
764  magicCode = UART_SET_MODE_MAGIC_CODE;
765  sl_IfWrite(g_pCB->FD, (_u8* )&magicCode, 4);
766 
767  /* clear magic code */
768  magicCode = 0;
769 
770  /* wait (blocking) till the magic code to be returned from device */
771  sl_IfRead(g_pCB->FD, (_u8* )&magicCode, 4);
772 
773  /* check for the received magic code matching */
774  if (UART_SET_MODE_MAGIC_CODE != magicCode)
775  {
776  _SL_ASSERT(0);
777  }
778  }
779 
780  return (_i16)Msg.Rsp.status;
781 }

§ sl_Start()

_i16 sl_Start ( const void *  pIfHdl,
_i8 *  pDevName,
const P_INIT_CALLBACK  pInitCallBack 
)

Start the SimpleLink device.

This function initialize the communication interface, set the enable pin of the device, and call to the init complete callback.

Parameters
[in]pIfHdlOpened Interface Object. In case the interface must be opened outside the SimpleLink Driver, the user might give the handler to be used in
any access of the communication interface with the device (UART/SPI).
The SimpleLink driver will open an interface port only if this parameter is null!
[in]pDevNameThe name of the device to open. Could be used when the pIfHdl is null, to transfer information to the open interface function
This pointer could be used to pass additional information to sl_IfOpen in case it is required (e.g. UART com port name)
[in]pInitCallBackPointer to function that would be called on completion of the initialization process.
If this parameter is NULL the function is blocked until the device initialization is completed, otherwise the function returns immediately.
Returns
Returns the current active role (STA/AP/P2P) or an error code:
  • ROLE_STA, ROLE_AP, ROLE_P2P in case of success, otherwise in failure one of the following is return:
  • SL_ERROR_ROLE_STA_ERR (Failure to load MAC/PHY in STA role)
  • SL_ERROR_ROLE_AP_ERR (Failure to load MAC/PHY in AP role)
  • SL_ERROR_ROLE_P2P_ERR (Failure to load MAC/PHY in P2P role)
  • SL_ERROR_CALIB_FAIL (Failure of calibration)
  • SL_ERROR_FS_CORRUPTED_ERR (FS is corrupted, Return to Factory Image or Program new image should be invoked (see sl_FsCtl, sl_FsProgram))
  • SL_ERROR_FS_ALERT_ERR (Device is locked, Return to Factory Image or Program new image should be invoked (see sl_FsCtl, sl_FsProgram))
  • SL_ERROR_RESTORE_IMAGE_COMPLETE (Return to factory image completed, perform reset)
  • SL_ERROR_GENERAL_ERR (General error during init)
See also
sl_Stop
Note
Belongs to basic_api
Warning
This function must be called before any other SimpleLink API is used, or after sl_Stop is called for reinit the device
Example:
  • Open interface without callback routine. The interface name and handler are handled by the sl_IfOpen routine:
    if( sl_Start(NULL, NULL, NULL) < 0 )
    {
    LOG("Error opening interface to device\n");
    }

  • Open interface with a callback routine:
    void SimpleLinkInitCallback(_u32 status)
    {
    LOG("Handle SimpleLink Interface acording to ststus %d\n", status);
    }
    void main(void)
    {
    if (sl_Start(NULL, NULL, SimpleLinkInitCallback) < 0)
    {
    LOG("Error opening interface to device\n");
    }
    }

Definition at line 124 of file device.c.

125 {
126  _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
127  InitComplete_t AsyncRsp;
128 
129  _SlDrvMemZero(&AsyncRsp, sizeof(InitComplete_t));
130 
131  /* verify no erorr handling in progress. if in progress than
132  ignore the API execution and return immediately with an error */
133  VERIFY_NO_ERROR_HANDLING_IN_PROGRESS();
134  if (SL_IS_DEVICE_STARTED)
135  {
136  return SL_RET_CODE_DEV_ALREADY_STARTED;
137  }
138  /* Perform any preprocessing before enable networking services */
139 #ifdef sl_DeviceEnablePreamble
140  sl_DeviceEnablePreamble();
141 #endif
142 
143  /* ControlBlock init */
144  (void)_SlDrvDriverCBInit();
145 
146  /* open the interface: usually SPI or UART */
147  if (NULL == pIfHdl)
148  {
149  g_pCB->FD = sl_IfOpen((void *)pDevName, SL_IF_OPEN_FLAGS);
150  }
151  else
152  {
153  g_pCB->FD = (_SlFd_t)pIfHdl;
154  }
155 
156  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8 *)&AsyncRsp, START_STOP_ID, SL_MAX_SOCKETS);
157 
158  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
159  {
160  return SL_POOL_IS_EMPTY;
161  }
162 
163  if( g_pCB->FD >= (_SlFd_t)0)
164  {
165  /* store the interface parameters for the internal call of the
166  sl_start to be called upon reset request handling */
167  DeviceCB.pIfHdl = pIfHdl;
168  DeviceCB.pDevName = pDevName;
169 
170  /* Mark that device is in progress! */
171  SL_SET_DEVICE_START_IN_PROGRESS;
172 
173  sl_DeviceDisable();
174 
175  sl_IfRegIntHdlr((SL_P_EVENT_HANDLER)_SlDrvRxIrqHandler, NULL);
176 
177  g_pCB->pInitCallback = pInitCallBack;
178  sl_DeviceEnable();
179 
180  if (NULL == pInitCallBack)
181  {
182 #ifdef SL_TINY
183  _SlDrvSyncObjWaitForever(&g_pCB->ObjPool[ObjIdx].SyncObj);
184 #else
185  SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(&g_pCB->ObjPool[ObjIdx].SyncObj,
186  INIT_COMPLETE_TIMEOUT,
187  SL_OPCODE_DEVICE_INITCOMPLETE);
188 #endif
189 
190  SL_UNSET_DEVICE_START_IN_PROGRESS;
191 
192  SL_SET_DEVICE_STARTED;
193 
194  /* release Pool Object */
195  _SlDrvReleasePoolObj(g_pCB->FunctionParams.AsyncExt.ActionIndex);
196  return _SlDeviceGetStartResponseConvert(AsyncRsp.Status);
197  }
198  else
199  {
200  return SL_RET_CODE_OK;
201  }
202  }
203  return SL_BAD_INTERFACE;
204 }

§ sl_Stop()

_i16 sl_Stop ( const _u16  Timeout)

Stop the SimpleLink device.

This function clears the enable pin of the device, closes the communication
interface and invokes the stop complete callback

Parameters
[in]TimeoutStop timeout in msec. Should be used to give the device time to finish
any transmission/reception that is not completed when the function was called.
Additional options:
  • 0 Enter to hibernate immediately
  • 0xFFFF Host waits for device's response before
    hibernating, without timeout protection
  • 0 < Timeout[msec] < 0xFFFF Host waits for device's response before
    hibernating, with a defined timeout protection
    This timeout defines the max time to wait. The NWP
    response can be sent earlier than this timeout.
Returns
Zero on success, or a negative value if an error occurred
See also
sl_Start
Note
This API will shutdown the device and invoke the "i/f close" function regardless
if it was opened implicitly or explicitly.
It is up to the platform interface library to properly handle interface close
routine
Belongs to basic_api
Warning

Definition at line 283 of file device.c.

284 {
285  _i16 RetVal=0;
286  _SlStopMsg_u Msg;
287  _BasicResponse_t AsyncRsp;
288  _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
289  _u8 ReleasePoolObject = FALSE;
290  _u8 IsProvInProgress = FALSE;
291 
292  /* In case the device has already stopped,
293  * return an error code .
294  */
295  if (!SL_IS_DEVICE_STARTED)
296  {
297  return SL_RET_CODE_DEV_NOT_STARTED;
298  }
299 
300  /* NOTE: don't check VERIFY_API_ALLOWED(), this command is not
301  * filtered in error handling and also not filtered in NWP lock state.
302  * If we are in the middle of assert handling than ignore stopping
303  * the device with timeout and force immediate shutdown as we would like
304  * to avoid any additional commands to the NWP */
305  if( (Timeout != 0)
306 #ifndef SL_TINY
307  && (!SL_IS_RESTART_REQUIRED)
308 #endif
309  )
310  {
311  /* Clear the Async response structure */
312  _SlDrvMemZero(&AsyncRsp, sizeof(_BasicResponse_t));
313 
314  /* let the device make the shutdown using the defined timeout */
315  Msg.Cmd.Timeout = Timeout;
316 
317  IsProvInProgress = SL_IS_PROVISIONING_IN_PROGRESS;
318 
319  /* if provisioning in progress do not take pool object as we are not going to wait for it if */
320  if (!IsProvInProgress)
321  {
322  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8 *)&AsyncRsp, START_STOP_ID, SL_MAX_SOCKETS);
323  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
324  {
325  return SL_POOL_IS_EMPTY;
326  }
327 
328  ReleasePoolObject = TRUE;
329  }
330 
331  /* Set the stop-in-progress flag */
332  SL_SET_DEVICE_STOP_IN_PROGRESS;
333 
334  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlStopCmdCtrl, &Msg, NULL));
335 
336 
337  /* Do not wait for stop async event if provisioning is in progress */
338  if((SL_OS_RET_CODE_OK == (_i16)Msg.Rsp.status) && (!(IsProvInProgress)))
339  {
340 
341 #ifdef SL_TINY
342  _SlDrvSyncObjWaitForever(&g_pCB->ObjPool[ObjIdx].SyncObj);
343  /* Wait for sync object to be signaled */
344 #else
345  SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(&g_pCB->ObjPool[ObjIdx].SyncObj,
346  STOP_DEVICE_TIMEOUT,
347  SL_OPCODE_DEVICE_STOP_ASYNC_RESPONSE);
348 
349 #endif
350 
351  Msg.Rsp.status = AsyncRsp.status;
352  RetVal = Msg.Rsp.status;
353  }
354 
355  /* Release pool object only if taken */
356  if (ReleasePoolObject == TRUE)
357  {
358  _SlDrvReleasePoolObj(ObjIdx);
359  }
360 
361  /* This macro wait for the NWP to raise a ready for shutdown indication.
362  * This function is unique for the CC32XX family, and expected to return
363  * in less than 600 mSec, which is the time takes for NWP to gracefully shutdown. */
364  WAIT_NWP_SHUTDOWN_READY;
365  }
366  else
367  {
368  /* Set the stop-in-progress flag */
369  SL_SET_DEVICE_STOP_IN_PROGRESS;
370  }
371 
372  sl_IfRegIntHdlr(NULL, NULL);
373  sl_DeviceDisable();
374  RetVal = sl_IfClose(g_pCB->FD);
375 
376  (void)_SlDrvDriverCBDeinit();
377 
378  /* clear the stop-in-progress flag */
379  SL_UNSET_DEVICE_STOP_IN_PROGRESS;
380 
381  /* clear the device started flag */
382  SL_UNSET_DEVICE_STARTED;
383 
384  return RetVal;
385 }

§ sl_Task()

void* sl_Task ( void *  pEntry)

The SimpleLink task entry.

This function must be called from the main loop or from dedicated thread in the following cases:

  • Non-Os Platform - should be called from the mail loop
  • Multi Threaded Platform when the user does not implement the external spawn functions - should be called from dedicated thread allocated to the SimpleLink driver. In this mode the function never return.
parameters
None
Returns
None
See also
Note
Belongs to basic_api
Warning
This function must be called from a thread that is start running before any call to other SimpleLink API

Definition at line 109 of file device.c.

110 {
111 #ifdef _SlTaskEntry
112  return (void*)_SlTaskEntry();
113 #else
114  return (void*)0;
115 #endif
116 }

Data Structure Documentation

§ SlDeviceEventResetRequest_t

struct SlDeviceEventResetRequest_t

Definition at line 87 of file device.h.

Data Fields
_u16 Caller
_i16 Status

§ SlDeviceEventError_t

struct SlDeviceEventError_t

Definition at line 104 of file device.h.

Data Fields
_i16 Code
SlDeviceSource_e Source

§ SlDeviceEventData_u

union SlDeviceEventData_u

Definition at line 110 of file device.h.

Data Fields
SlDeviceEventError_t Error
SlDeviceEventResetRequest_t ResetRequest

§ SlDeviceEvent_t

struct SlDeviceEvent_t

Definition at line 125 of file device.h.

Data Fields
SlDeviceEventData_u Data
_u32 Id

§ SlDeviceFatalDeviceAssert_t

struct SlDeviceFatalDeviceAssert_t

Definition at line 139 of file device.h.

Data Fields
_u32 Code
_u32 Value

§ SlDeviceFatalNoCmdAck_t

struct SlDeviceFatalNoCmdAck_t

Definition at line 146 of file device.h.

Data Fields
_u32 Code

§ SlDeviceFatalData_u

union SlDeviceFatalData_u

Definition at line 152 of file device.h.

Data Fields
SlDeviceFatalCmdTimeout_t CmdTimeout
SlDeviceFatalDeviceAssert_t DeviceAssert
SlDeviceFatalNoCmdAck_t NoCmdAck

§ SlDeviceFatal_t

struct SlDeviceFatal_t

Definition at line 160 of file device.h.

Data Fields
SlDeviceFatalData_u Data
_u32 Id

§ SlDeviceUartIfParams_t

struct SlDeviceUartIfParams_t

Definition at line 234 of file device.h.

Data Fields
_u32 BaudRate
_u8 CommPort
_u8 FlowControlEnable

§ SlDeviceVersion_t

struct SlDeviceVersion_t

Definition at line 256 of file device.h.

Data Fields
_u32 ChipId
_u8 FwVersion[4]
_u8 NwpVersion[4]
_u16 Padding
_u8 PhyVersion[4]
_u16 RomVersion

§ SlDateTime_t

struct SlDateTime_t

Definition at line 267 of file device.h.

Data Fields
_u32 reserved[3]
_u32 tm_day
_u32 tm_hour
_u32 tm_min
_u32 tm_mon
_u32 tm_sec
_u32 tm_week_day
_u32 tm_year
_u32 tm_year_day

§ SlDeviceInitInfo_t

struct SlDeviceInitInfo_t

Definition at line 286 of file device.h.

Data Fields
_u32 ChipId
_u32 MoreData