I2CDevice هو إطار بيثون يهدف إلى التعامل مع أنماط تفاعل جهاز SMBUS/I2C الشائعة.
يهدف هذا المشروع إلى جعل تطبيقات المجموعة لمكتبات Python لأجهزة I2C أسهل وأبسط وتوثيق ذاتيًا بطبيعتها.
يقوم بذلك عن طريق فصل وصف مفصل لسجلات الأجهزة وكيف ينبغي معالجتها في لغة تعريف منظمة.
لا يهدف هذا المشروع إلى مساعدتك في إنشاء واجهة برمجة تطبيقات عامة لأجهزة Python- التي يجب أن يتم بناؤها فوق الأساسيات المقدمة هنا.
يجب أن تهدف عمومًا إلى تمثيل 1: 1 لسجلات الأجهزة في الجهاز الذي تنفذه ، حتى لو كنت لا تخطط لاستخدام جميع الوظائف. يتيح وجود مجموعة التسجيل الكاملة التي تم تنفيذها الإضافة السهلة للميزات الجديدة في المستقبل.
تحقق من المكتبات المدرجة أدناه للحصول على أمثلة في العالم الحقيقي.
512ms ) لتسجيل القيم (مثل 0b111 ) والعودة مرة أخرىgetset مع وسيطات الكلمات الرئيسية يحدد المثال أدناه سجل ALS_CONTROL على LTR559 ، مع عنوان التسجيل 0x80 .
لديها 3 حقول. الكسب - الذي يتم تعيينه لقيم العالم الحقيقي - و SW_RESET/MODE والتي هي أعلام بت واحدة.
ALS_CONTROL = Register ( 'ALS_CONTROL' , 0x80 , fields = (
BitField ( 'gain' , 0b00011100 , values_map = { 1 : 0b000 , 2 : 0b001 , 4 : 0b011 , 8 : 0b011 , 48 : 0b110 , 96 : 0b111 }),
BitField ( 'sw_reset' , 0b00000010 ),
BitField ( 'mode' , 0b00000001 )
))ومع ذلك ، لا يلزم استخدام جدول البحث للقيم ، ومع ذلك ، يمكن استخدام وظيفة لترجمة القيم من وإلى تنسيق يفهمه الجهاز.
يستخدم المثال أدناه i2cdevice._byte_swap لتغيير endianness لقيمتين 16bit قبل تخزينها/استردادها.
# This will address 0x88, 0x89, 0x8A and 0x8B as a continuous 32bit register
ALS_DATA = Register ( 'ALS_DATA' , 0x88 , fields = (
BitField ( 'ch1' , 0xFFFF0000 , bitwidth = 16 , values_in = _byte_swap , values_out = _byte_swap ),
BitField ( 'ch0' , 0x0000FFFF , bitwidth = 16 , values_in = _byte_swap , values_out = _byte_swap )
), read_only = True , bitwidth = 32 ) تحدد "التسجيل" و "bitfield" مجموعة من القواعد والمنطق للتفصيل مع سجل الأجهزة الذي يتم تفسيره بواسطة فئة الجهاز. يتم الإعلان عن السجلات على جهاز باستخدام registers=() وسيطة الكلمات الرئيسية:
I2C_ADDR = 0x23
ltr559 = Device ( I2C_ADDR , bit_width = 8 , registers = (
ALS_CONTROL ,
ALS_DATA
)) يمكن قراءة واحدة من حقول السجل في علامة تسميها باستخدام طريقة get :
register_values = ltr559 . get ( 'ALS_CONTROL' )
gain = register_values . gain
sw_reset = register_values . sw_reset
mode = register_values . mode إن namedtuple الذي تم إرجاعه من get غير قابل للتغيير ولا يحاول تعيين القيم مرة أخرى إلى الأجهزة ، من أجل كتابة حقول واحدة أو أكثر إلى سجل يجب استخدامه مع set للكلمة الرئيسية لكل حقل:
ltr559 . set ( 'ALS_CONTROL' ,
gain = 4 ,
sw_reset = 1 )سيؤدي ذلك إلى قراءة حالة التسجيل من الجهاز ، وتحديث BitFields وفقًا لذلك واكتب النتيجة مرة أخرى.