#include "NXTDefs.h" // The main program dseg segment is_invalid byte i2c_check TCommLSCheckStatus i2c_write TCommLSWrite i2c_read TCommLSRead i2c_8574_alloff byte[], 0x40, 0xFF i2c_8574_allon byte[], 0x40, 0x00 i2c_8574_2on byte[], 0x40, 0xFB i2c_8574_3on byte[], 0x40, 0xF7 i2c_8574_read byte[], 0x40 state_buffer byte[], 0x00 state byte dtArgs TDrawText resultnum byte[] p0 byte[], '0: ' p1 byte[], '1: ' p2 byte[], '2: ' p3 byte[], '3: ' p4 byte[], '4: ' p5 byte[], 'state: ' dseg ends thread main set dtArgs.Options, 1 setin IN_TYPE_LOWSPEED, IN_3, Type setin IN_MODE_RAW, IN_3, InputMode setin TRUE, IN_3, InvalidData wait_for_valid: getin is_invalid, IN_3, InvalidData //numtostr resultnum, is_invalid //strcat dtArgs.Text, p1, resultnum //syscall DrawText, dtArgs //wait 500 brcmp EQ, wait_for_valid, is_invalid, TRUE mov i2c_check.Port, IN_3 i2c_tryagain1: syscall CommLSCheckStatus, i2c_check //numtostr resultnum, i2c_check.Result //strcat dtArgs.Text, p2, resultnum //syscall DrawText, dtArgs //wait 500 brcmp GT, i2c_tryagain1, i2c_check.Result, NO_ERR wait 50 mov i2c_write.Port, IN_3 set i2c_write.ReturnLen, 0 mov i2c_write.Buffer, i2c_8574_alloff syscall CommLSWrite, i2c_write wait 1000 i2c_tryagain2: syscall CommLSCheckStatus, i2c_check //numtostr resultnum, i2c_check.Result //strcat dtArgs.Text, p3, resultnum //syscall DrawText, dtArgs //wait 500 brcmp GT, i2c_tryagain2, i2c_check.Result, NO_ERR mov i2c_write.Buffer, i2c_8574_allon syscall CommLSWrite, i2c_write wait 1000 i2c_tryagain3: syscall CommLSCheckStatus, i2c_check //numtostr resultnum, i2c_check.Result //strcat dtArgs.Text, p4, resultnum //syscall DrawText, dtArgs //wait 500 brcmp GT, i2c_tryagain3, i2c_check.Result, NO_ERR mov i2c_write.Buffer, i2c_8574_2on syscall CommLSWrite, i2c_write wait 1000 i2c_tryagain4: syscall CommLSCheckStatus, i2c_check //numtostr resultnum, i2c_check.Result //strcat dtArgs.Text, p4, resultnum //syscall DrawText, dtArgs //wait 500 brcmp GT, i2c_tryagain4, i2c_check.Result, NO_ERR mov i2c_write.Buffer, i2c_8574_3on syscall CommLSWrite, i2c_write wait 1000 i2c_tryagain5: syscall CommLSCheckStatus, i2c_check //numtostr resultnum, i2c_check.Result //strcat dtArgs.Text, p4, resultnum //syscall DrawText, dtArgs //wait 500 brcmp GT, i2c_tryagain5, i2c_check.Result, NO_ERR mov i2c_write.Buffer, i2c_8574_alloff syscall CommLSWrite, i2c_write //wait 1000 /* reading data */ i2c_tryagain6: syscall CommLSCheckStatus, i2c_check brcmp GT, i2c_tryagain6, i2c_check.Result, NO_ERR //numtostr resultnum, i2c_check.Result //strcat dtArgs.Text, p0, resultnum //syscall DrawText, dtArgs //wait 2000 set i2c_write.ReturnLen, 1 mov i2c_write.Buffer, i2c_8574_read syscall CommLSWrite, i2c_write //numtostr resultnum, i2c_write.Result //strcat dtArgs.Text, p1, resultnum //syscall DrawText, dtArgs //wait 50 i2c_tryagain7: syscall CommLSCheckStatus, i2c_check brcmp GT, i2c_tryagain7, i2c_check.Result, NO_ERR numtostr resultnum, i2c_check.Result strcat dtArgs.Text, p2, resultnum syscall DrawText, dtArgs wait 2000 numtostr resultnum, i2c_check.BytesReady strcat dtArgs.Text, p3, resultnum syscall DrawText, dtArgs wait 2000 mov i2c_write.Port, IN_3 set i2c_write.ReturnLen, 0 mov i2c_write.Buffer, i2c_8574_allon syscall CommLSWrite, i2c_write i2c_tryagain98: syscall CommLSCheckStatus, i2c_check brcmp GT, i2c_tryagain98, i2c_check.Result, NO_ERR wait 1000 mov i2c_write.Buffer, i2c_8574_alloff syscall CommLSWrite, i2c_write i2c_tryagain99: syscall CommLSCheckStatus, i2c_check brcmp GT, i2c_tryagain99, i2c_check.Result, NO_ERR wait 1000 mov i2c_read.Port, IN_3 mov i2c_read.Buffer, state_buffer set i2c_read.BufferLen, 1 syscall CommLSRead, i2c_read numtostr resultnum, i2c_read.Result strcat dtArgs.Text, p4, resultnum syscall DrawText, dtArgs wait 1000 index state, i2c_read.Buffer, 0 numtostr resultnum, state strcat dtArgs.Text, p5, resultnum syscall DrawText, dtArgs wait 2000 exit endt