static ZERO_OR_ERROR FS_Mclear(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); int init = 1; if ( BAD( Cache_Get_SlaveSpecific(&init, sizeof(init), SlaveSpecificTag(INI), pn)) ) { OWQ_Y(owq) = 1; if ( FS_r_strobe(owq) != 0 ) { // set reset pin to strobe mode return -EINVAL; } RETURN_ERROR_IF_BAD( OW_w_pio(0x30, pn) ); UT_delay(100); // init RETURN_ERROR_IF_BAD( OW_w_pio(0x38, pn) ) ; UT_delay(10); // Enable Display, Cursor, and Blinking // Entry-mode: auto-increment, no shift RETURN_ERROR_IF_BAD( OW_w_pio(0x0F, pn) ) ; RETURN_ERROR_IF_BAD( OW_w_pio(0x06, pn) ) ; Cache_Add_SlaveSpecific(&init, sizeof(init), SlaveSpecificTag(INI), pn); } // clear RETURN_ERROR_IF_BAD( OW_w_pio(0x01, pn) ); UT_delay(2); return FS_Mhome(owq); }
// print from specified positionh -- // either in ascii format "y.x:text" or "x:text" // or binary (first 2 bytes are y and x) static ZERO_OR_ERROR FS_Hscreenyx(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); struct yx YX = { 0, 0, OWQ_buffer(owq), OWQ_size(owq), 0 } ; RETURN_ERROR_IF_BAD( Parseyx( &YX ) ) ; RETURN_ERROR_IF_BAD( OW_Hinit(pn) ) ; return GB_to_Z_OR_E( OW_Hprintyx(&YX, pn) ); }
static ZERO_OR_ERROR FS_r_data(struct one_wire_query *owq) { BYTE data; RETURN_ERROR_IF_BAD( OW_r_data(&data, PN(owq)) ) ; OWQ_U(owq) = data; return 0; }
static ZERO_OR_ERROR FS_r_gpio(struct one_wire_query *owq) { BYTE data; RETURN_ERROR_IF_BAD( OW_r_gpio(&data, PN(owq)) ); OWQ_U(owq) = (~data) & 0x0F; return 0; }
/* From register 0x8A */ static ZERO_OR_ERROR FS_r_latch(struct one_wire_query *owq) { BYTE data[6]; RETURN_ERROR_IF_BAD( OW_r_reg(data, PN(owq)) ); OWQ_U(owq) = data[2]; return 0; }
// put in home position static ZERO_OR_ERROR FS_Hhome(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); struct yx YX = { 1, 1, "", 0, 0 } ; RETURN_ERROR_IF_BAD( OW_Hinit(pn) ) ; return GB_to_Z_OR_E( OW_Hprintyx(&YX, pn) ); }
static ZERO_OR_ERROR FS_r_por(struct one_wire_query *owq) { BYTE data[6]; RETURN_ERROR_IF_BAD( OW_r_reg(data, PN(owq)) ); OWQ_Y(owq) = UT_getbit(&data[5], 3); return 0; }
/* From register 0x89 */ static ZERO_OR_ERROR FS_r_pio(struct one_wire_query *owq) { BYTE data[6]; RETURN_ERROR_IF_BAD( OW_r_reg(data, PN(owq)) ) ; OWQ_U(owq) = BYTE_INVERSE(data[1]); /* reverse bits */ return 0; }
static ZERO_OR_ERROR FS_Mhome(struct one_wire_query *owq) { // home RETURN_ERROR_IF_BAD( OW_w_pio(0x02, PN(owq)) ); UT_delay(2); return 0; }
static ZERO_OR_ERROR FS_out_of_testmode(struct one_wire_query *owq) { if ( OWQ_Y(owq) ) { RETURN_ERROR_IF_BAD( OW_out_of_test_mode(PN(owq) ) ); } return 0; }
/* read powered flag */ static ZERO_OR_ERROR FS_r_power(struct one_wire_query *owq) { BYTE p; RETURN_ERROR_IF_BAD( OW_r_mem(&p, 1, _ADDRESS_POWERED, PN(owq)) ) ; OWQ_Y(owq) = (p == _1W_2450_POWERED); Cache_Add_SlaveSpecific(&OWQ_Y(owq), sizeof(int), SlaveSpecificTag(POW), PN(owq)); return 0; }
// print from current position static ZERO_OR_ERROR FS_Hscreen(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); // y=0 is flag to do no position setting struct yx YX = { LCD_SAME_LOCATION_VALUE, LCD_SAME_LOCATION_VALUE, OWQ_buffer(owq), OWQ_size(owq), 0 } ; RETURN_ERROR_IF_BAD( OW_Hinit(pn) ) ; return GB_to_Z_OR_E( OW_Hprintyx(&YX, pn) ); }
static ZERO_OR_ERROR FS_w_por(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); BYTE data[6]; RETURN_ERROR_IF_BAD( OW_r_reg(data, pn) ); UT_setbit(&data[5], 3, OWQ_Y(owq)); return GB_to_Z_OR_E( OW_w_control(data[5], pn) ) ; }
static ZERO_OR_ERROR FS_r_name(struct one_wire_query *owq) { BYTE buf[256]; size_t len = OWQ_size(owq); RETURN_ERROR_IF_BAD( OW_r_std(buf,&len, M_CONFIG, CFG_NAME, PN(owq))); return OWQ_format_output_offset_and_size((const char *)buf, len, owq); }
// Print from home position static ZERO_OR_ERROR FS_Hmessage(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); struct yx YX = { 1, 1, OWQ_buffer(owq), OWQ_size(owq), 0 } ; RETURN_ERROR_IF_BAD( OW_Hinit(pn) ) ; if (FS_Hclear(owq) != 0) { return -EINVAL; } return GB_to_Z_OR_E( OW_Hprintyx(&YX, pn) ); }
static ZERO_OR_ERROR FS_r_counters(struct one_wire_query *owq) { UINT u[4]; RETURN_ERROR_IF_BAD( OW_r_counters(u, PN(owq)) ) ; OWQ_array_U(owq, 0) = u[0]; OWQ_array_U(owq, 1) = u[1]; OWQ_array_U(owq, 2) = u[2]; OWQ_array_U(owq, 3) = u[3]; return 0; }
static ZERO_OR_ERROR FS_r_param(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); size_t pagesize = 32; BYTE data[pagesize]; off_t param_offset = pn->selected_filetype->data.i ; RETURN_ERROR_IF_BAD( OW_r_page(data, pagesize-param_offset, param_offset, pn) ); return OWQ_format_output_offset_and_size((ASCII *) data, FileLength(pn), owq); }
static ZERO_OR_ERROR FS_r_ports_raw(struct one_wire_query *owq) { BYTE buf[10]; size_t len = OWQ_size(owq); if(len>sizeof(buf)) len=sizeof(buf); RETURN_ERROR_IF_BAD( OW_r_std(buf,&len, M_PORT, 0, PN(owq))); return OWQ_format_output_offset_and_size((const char *)buf, len, owq); }
static ZERO_OR_ERROR FS_r_info_raw(struct one_wire_query *owq) { BYTE buf[256]; size_t len = OWQ_size(owq); if(len>sizeof(buf)) len=sizeof(buf); RETURN_ERROR_IF_BAD( OW_r_std(buf,&len, M_CONFIG, OWQ_pn(owq).extension, PN(owq))); return OWQ_format_output_offset_and_size((const char *)buf, len, owq); }
// 0x01 => blinking cursor on // 0x02 => cursor on // 0x04 => display on static ZERO_OR_ERROR FS_Honoff(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); BYTE onoff[] = { NIBBLE_DATA(OWQ_U(owq)) }; RETURN_ERROR_IF_BAD( OW_Hinit(pn) ) ; // onoff if ( BAD( OW_w_pios(onoff, 2, pn) ) ) { LEVEL_DEBUG("Error setting LCD state"); return -EINVAL; } return 0; }
/* From registers 0x8B-0x8D */ static ZERO_OR_ERROR FS_r_s_alarm(struct one_wire_query *owq) { BYTE d[6]; int i, p; UINT U; RETURN_ERROR_IF_BAD( OW_r_reg(d, PN(owq)) ); /* register 0x8D */ U = (d[5] & 0x03) * 100000000; /* registers 0x8B and 0x8C */ for (i = 0, p = 1; i < 8; ++i, p *= 10) { U += UT_getbit(&d[3], i) | (UT_getbit(&d[4], i) << 1) * p; } OWQ_U(owq) = U; return 0; }
/* caching system for storage */ static ZERO_OR_ERROR FS_r_cum(struct one_wire_query *owq) { UINT u[4]; /* just to prime the "CUM" data */ RETURN_ERROR_IF_BAD( OW_r_counters(u, PN(owq)) ) ; if ( BAD( Cache_Get_SlaveSpecific((void *) u, 4 * sizeof(UINT), SlaveSpecificTag(CUM), PN(owq))) ) { return -EINVAL; } OWQ_array_U(owq, 0) = u[0]; OWQ_array_U(owq, 1) = u[1]; OWQ_array_U(owq, 2) = u[2]; OWQ_array_U(owq, 3) = u[3]; return 0; }
static ZERO_OR_ERROR FS_w_page(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); ZERO_OR_ERROR z_or_e ; // Special case for NV1 (page 0) -- need to unlock if ( pn->extension == 0 ) { RETURN_ERROR_IF_BAD( OW_nv1_unlock( pn ) ) ; } z_or_e = OW_w_page((BYTE *) OWQ_buffer(owq), OWQ_size(owq), OWQ_offset(owq) + (pn->extension)*_1W_2436_PAGESIZE, pn) ; // Special case for NV1 (page 0) -- need to relock if ( pn->extension == 0 ) { OW_nv1_lock( pn ) ; } return z_or_e ; }
static ZERO_OR_ERROR FS_w_setvolt(struct one_wire_query *owq) { struct parsedname *pn = PN(owq); RETURN_ERROR_IF_BAD( FS_w_sibling_Y( 0, "set_alarm/unset", owq ) ) ; return GB_to_Z_OR_E(OW_w_vset( OWQ_F(owq), pn->selected_filetype->data.i, pn)) ; }
static ZERO_OR_ERROR FS_r_version(struct one_wire_query *owq) { BYTE v[_LCD_PAGE_SIZE]; RETURN_ERROR_IF_BAD( OW_r_version(v, PN(owq)) ) ; return OWQ_format_output_offset_and_size((ASCII *) v, _LCD_PAGE_SIZE, owq); }