1 // Copyright 2021 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 #pragma once 15 16 #include "RTOS.h" 17 18 namespace pw::thread::backend { 19 20 // Instead of using a pw::thread::embos specific identifier, the ThreadX 21 // thread pointer is used as this means pw::this_thread::id works correctly on 22 // threads started with the native ThreadX APIs as well as those started 23 // using the pw::thread APIs. 24 class NativeId { 25 public: task_ptr_(task_ptr)26 constexpr NativeId(OS_TASK* task_ptr = nullptr) : task_ptr_(task_ptr) {} 27 28 constexpr bool operator==(NativeId other) const { 29 return task_ptr_ == other.task_ptr_; 30 } 31 constexpr bool operator!=(NativeId other) const { 32 return task_ptr_ != other.task_ptr_; 33 } 34 constexpr bool operator<(NativeId other) const { 35 return task_ptr_ < other.task_ptr_; 36 } 37 constexpr bool operator<=(NativeId other) const { 38 return task_ptr_ <= other.task_ptr_; 39 } 40 constexpr bool operator>(NativeId other) const { 41 return task_ptr_ > other.task_ptr_; 42 } 43 constexpr bool operator>=(NativeId other) const { 44 return task_ptr_ >= other.task_ptr_; 45 } 46 47 private: 48 OS_TASK* task_ptr_; 49 }; 50 51 } // namespace pw::thread::backend 52