10 #define HAL_LOG_CHANNEL SCOM
11 #define HAL_LOG_SUBCHANNEL UTIL
24 HAL_ASSERT_AND_EXECUTE(scom != NULL) {
25 HAL_ASSERT_AND_EXECUTE(identity != NULL) {
71 HAL_ASSERT_AND_EXECUTE(scom != NULL) {
84 while ((!found) && (scom->
clockSource() < startTime + timeout)) {
86 HAL_LOG_INFO(
"SCOM_WaitForDevice: Sending identify request with no ACK");
91 if ((tempIdentity.
deviceClass & expectedDeviceClassMask) == (expectedDeviceClass & expectedDeviceClassMask)) {
93 HAL_LOG_INFO(
"SCOM_WaitForDevice: Got matching response: DeviceClass=0x%" PRIX32);
100 HAL_LOG_WARNING(
"SCOM_WaitForDevice: Got non-matching response. Will try again");
103 HAL_LOG_WARNING(
"SCOM_WaitForDevice: Got no response. Will try again");
134 unsigned int SCOM_ScanAndRun(
void (*initProc)(IODevice iodevice,
const char* deviceName),
136 uint32_t responseTimeout)
138 unsigned int deviceCount, deviceNo, validDeviceCounter;
145 validDeviceCounter = 0;
148 deviceCount = IOSERIAL_Enumerate();
151 for (deviceNo = 0; deviceNo < deviceCount; deviceNo++) {
154 iodev = IOSERIAL_Create(IOSERIAL_GetEnumeratedDeviceName(deviceNo));
158 if (HALRESULT_OK == IODEV_Init(iodev)) {
159 IOSERIAL_SetBaudrate(iodev, 115200);
160 HAL_LOG_INFO(
"ScanAndRun working on %s", IOSERIAL_GetEnumeratedDeviceName(deviceNo));
162 IODEV_EnableWrite(iodev);
163 IODEV_EnableRead(iodev);
167 initProc(iodev, IOSERIAL_GetEnumeratedDeviceName(deviceNo));
178 SCOM_Init(scom, iodev, frameBuffer, OS_GetSystemTime, 1000, 0, 0, 0, NULL);
188 if (userProc(scom, &identity, IOSERIAL_GetEnumeratedDeviceName(deviceNo))) {
190 validDeviceCounter++;
194 validDeviceCounter++;
209 IOSERIAL_Destroy(iodev);
213 return validDeviceCounter;
SCOMResult SCOM_DeinitializeFrameTypeMatchFilter(SCOMFrameTypeMatchFilter *frameMatchFilter)
Packet type definition: IDENTIFY.
void SCOM_StopFilteringThread(SCOMDataLink scom)
SCOMResult SCOM_WaitForDevice(SCOMDataLink scom, uint32_t expectedDeviceClass, uint32_t expectedDeviceClassMask, uint32_t probeInterval, uint32_t timeout, SCOMIdentity *identity)
SCOMResult SCOM_Deinit(SCOMDataLinkDesc *const scom)
SCOM Data Link descriptor.
SCOMResult SCOM_SendFrame(SCOMDataLinkDesc *const scom, uint8_t framePriority, uint8_t frameType, const void *frameData, uint8_t frameDataSize)
Packet filter based on frame type.
SCOMResult SCOM_WaitForFrameTypeFilter(SCOMFrameTypeMatchFilter *frameMatchFilter, OSTime timeout)
SCOMResult SCOM_RemoveFilter(SCOMDataLink scom, SCOMFilter filter)
unsigned int SCOM_ScanAndRun(void(*initProc)(IODevice iodevice, const char *deviceName), bool(*userProc)(SCOMDataLink scom, SCOMIdentity *identity, const char *deviceName), uint32_t responseTimeout)
SCOMDataLinkDesc * SCOM_Create(void)
SCOMResult SCOM_InitializeFrameTypeMatchFilter(SCOMFrameTypeMatchFilter *frameMatchFilter, void *data, size_t max_data_size)
SCOMFrameBuffer * SCOM_CreateFrameBuffer(size_t rxBuffSize, size_t txBuffSize)
SCOMClockSource clockSource
IODevice object implementing the hardware interface.
SCOMResult SCOM_RunFilteringThread(SCOMDataLink scom)
SCOMResult SCOM_GetIdentity(SCOMDataLinkDesc *const scom, SCOMIdentity *const identity)
SCOMResult SCOM_InitFiltering(SCOMDataLink scom)
uint32_t deviceClass
Device class.
SCOMResult SCOM_DeinitFiltering(SCOMDataLink scom)
SCOMResult SCOM_InsertFilter(SCOMDataLink scom, SCOMFilter filter)
SCOMResult SCOM_Init(SCOMDataLink scom, IODevice iodevice, SCOMFrameBuffer *frameBuffer, SCOMClockSource clockSource, uint32_t ackTimeout, uint32_t deviceClass, uint8_t *deviceUID, uint8_t numberOfServices, uint8_t *serviceIDs)
void SCOM_StopProcessingThread(SCOMDataLink scom)
SCOMResult SCOM_SendFrameWithoutAck(SCOMDataLink scom, uint8_t framePriority, uint8_t frameType, const void *frameData, uint8_t frameDataSize)
SCOMResult SCOM_SetupFrameTypeMatchFilter(SCOMFrameTypeMatchFilter *frameMatchFilter, uint8_t frame_type)
void SCOM_Destroy(SCOMDataLinkDesc *const scom)
SCOMResult SCOM_RunProcessingThread(SCOMDataLinkDesc *const scom)
Definition of the frame buffer used by SCOM.
SCOMFilterDesc filter
Native SCOM filter descriptor.