uint8_t u8g_dev_pb16h2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { (void)u8g; u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); switch(msg) { case U8G_DEV_MSG_SET_8PIXEL: if ( u8g_pb_Is8PixelVisible(pb, (u8g_dev_arg_pixel_t *)arg) ) { u8g_pb16h2_Set8PixelStd(pb, (u8g_dev_arg_pixel_t *)arg); } break; case U8G_DEV_MSG_SET_PIXEL: u8g_pb16h2_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg, 0); break; case U8G_DEV_MSG_SET_4TPIXEL: u8g_pb16h2_Or4PixelStd(pb, (u8g_dev_arg_pixel_t *)arg); break; case U8G_DEV_MSG_SET_TPIXEL: u8g_pb16h2_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg, 1); break; case U8G_DEV_MSG_INIT: break; case U8G_DEV_MSG_STOP: break; case U8G_DEV_MSG_PAGE_FIRST: u8g_page_First(&(pb->p)); u8g_pb16h2_Clear(pb); break; case U8G_DEV_MSG_PAGE_NEXT: if ( u8g_page_Next(&(pb->p)) == 0 ) return 0; u8g_pb16h2_Clear(pb); break; #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION case U8G_DEV_MSG_IS_BBX_INTERSECTION: return u8g_pb_IsIntersection(pb, (u8g_dev_arg_bbx_t *)arg); #endif case U8G_DEV_MSG_GET_PAGE_BOX: u8g_pb_GetPageBox(pb, (u8g_box_t *)arg); break; case U8G_DEV_MSG_GET_WIDTH: *((u8g_uint_t *)arg) = pb->width; break; case U8G_DEV_MSG_GET_HEIGHT: *((u8g_uint_t *)arg) = pb->p.total_height; break; case U8G_DEV_MSG_SET_COLOR_ENTRY: break; case U8G_DEV_MSG_SET_XY_CB: break; case U8G_DEV_MSG_GET_MODE: return U8G_MODE_GRAY2BIT; } return 1; }
// Lua: bool = u8g.skipPage(self) static int lu8g_skipPage( lua_State *L ) { lu8g_userdata_t *lud; if ((lud = get_lud( L )) == NULL) return 0; u8g_pb_t *pb = (u8g_pb_t *)(LU8G->dev->dev_mem); //Based on: uint8_t u8g_NextPageLL(u8g_t *u8g, u8g_dev_t *dev) uint8_t r; LU8G->state_cb(U8G_STATE_MSG_BACKUP_ENV); LU8G->state_cb(U8G_STATE_MSG_RESTORE_U8G); r = u8g_page_Next(&(pb->p)); if ( r != 0 ) { u8g_call_dev_fn(LU8G, LU8G->dev, U8G_DEV_MSG_GET_PAGE_BOX, &(LU8G->current_page)); } LU8G->state_cb(U8G_STATE_MSG_RESTORE_ENV); lua_pushboolean( L, r ); return 1; }
uint8_t u8g_dev_gprof_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); switch(msg) { case U8G_DEV_MSG_INIT: break; case U8G_DEV_MSG_STOP: break; case U8G_DEV_MSG_PAGE_FIRST: u8g_pb_Clear(pb); u8g_page_First(&(pb->p)); break; case U8G_DEV_MSG_PAGE_NEXT: /* { uint8_t i, j; uint8_t page_height; page_height = pb->p.page_y1; page_height -= pb->p.page_y0; page_height++; for( j = 0; j < page_height; j++ ) { printf("%02d ", j); for( i = 0; i < WIDTH; i++ ) { if ( (u8g_pb_dev_stdout_buf[i] & (1<<j)) != 0 ) printf("#"); else printf("."); } printf("\n"); } } */ if ( u8g_page_Next(&(pb->p)) == 0 ) { //printf("\n"); return 0; } u8g_pb_Clear(pb); break; #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION case U8G_DEV_MSG_IS_BBX_INTERSECTION: { u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg; u8g_uint_t x2, y2; y2 = bbx->y; y2 += bbx->h; y2--; if ( u8g_pb_IsYIntersection(pb, bbx->y, y2) == 0 ) return 0; /* maybe this one can be skiped... probability is very high to have an intersection, so it would be ok to always return 1 */ x2 = bbx->x; x2 += bbx->w; x2--; if ( u8g_pb_IsXIntersection(pb, bbx->x, x2) == 0 ) return 0; } return 1; #endif case U8G_DEV_MSG_GET_PAGE_BOX: u8g_pb_GetPageBox(pb, (u8g_box_t *)arg); break; case U8G_DEV_MSG_SET_COLOR_INDEX: break; case U8G_DEV_MSG_SET_XY_CB: break; } return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg); }
uint8_t u8g_dev_pbm_8h2_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { static FILE *fp; u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); u8g_uint_t width = ((u8g_pb_t*)dev->dev_mem)->width; u8g_uint_t height = ((u8g_pb_t*)dev->dev_mem)->p.total_height; switch(msg) { case U8G_DEV_MSG_PAGE_FIRST: #ifdef __unix__ u8g_buf_lower_limit = u8g_pb_dev_pbm_buf; u8g_buf_upper_limit = u8g_pb_dev_pbm_buf + width; #endif u8g_pb_Clear(pb); u8g_page_First(&(pb->p)); if ( u8g_dev_pbm_h2_enable != 0 ) { fp = fopen("u8g.pbm", "w"); fprintf(fp, "P4\n%d %d\n", width, height); } return 1; case U8G_DEV_MSG_PAGE_NEXT: if ( u8g_dev_pbm_h2_enable != 0 ) { u8g_uint_t i, j, k; uint8_t b, b1,b2; for( j = 0; j < PAGE_HEIGHT; j++ ) { b = 0; i = 0; for(;;) { b1 = 0; b = ((uint8_t *)(pb->buf))[i+j*(width/4)]; for( k = 0; k < 4; k ++ ) { b1 >>= 1; if ( (b&0xc0) != 0 ) b1 |= 8; b <<= 2; } i++; b2 = 0; b = ((uint8_t *)(pb->buf))[i+j*(width/4)]; for( k = 0; k < 4; k ++ ) { b2 >>= 1; if ( (b&0xc0) != 0 ) b2 |= 8; b <<= 2; } i++; fprintf(fp, "%c", b1*16+b2); if ( i >= width/4 ) break; } } } if ( u8g_page_Next(&(pb->p)) == 0 ) { if ( u8g_dev_pbm_h2_enable != 0 ) fclose(fp); return 0; } u8g_pb_Clear(pb); return 1; }